diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-05 12:57:56 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-04-05 13:00:27 +0200 |
commit | 8b92314dc0e2398c4a8750bbb66ee1804e64377f (patch) | |
tree | 6b2aefa0adf96643e35bb4c4da3af3c4954cd551 /src/backend/mime.rs | |
parent | 75a82d3c2eaf1716a057bd5869f7b996965075b7 (diff) |
Add Payload type
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/backend/mime.rs')
-rw-r--r-- | src/backend/mime.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/backend/mime.rs b/src/backend/mime.rs new file mode 100644 index 0000000..d65761e --- /dev/null +++ b/src/backend/mime.rs @@ -0,0 +1,22 @@ +use anyhow::Error; + +#[derive(Debug, Eq, PartialEq)] +pub struct MimeType(mime::Mime); + +impl<C: libipld::codec::Codec> libipld::codec::Encode<C> for MimeType { + fn encode<W: std::io::Write>(&self, _c: C, w: &mut W) -> libipld::error::Result<()> { + w.write_all(self.0.essence_str().as_bytes()).map_err(Error::from) + } +} + +impl libipld::codec::Decode<libipld_cbor::DagCborCodec> for MimeType { + fn decode<R: std::io::Read + std::io::Seek>(c: libipld_cbor::DagCborCodec, r: &mut R) -> libipld::error::Result<Self> { + use std::str::FromStr; + + String::decode(c, r) + .map_err(Error::from) + .and_then(|s| mime::Mime::from_str(&s).map_err(Error::from)) + .map(MimeType) + } +} + |