summaryrefslogtreecommitdiffstats
path: root/src/backend/mime.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-04-05 12:57:56 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-04-05 13:00:27 +0200
commit8b92314dc0e2398c4a8750bbb66ee1804e64377f (patch)
tree6b2aefa0adf96643e35bb4c4da3af3c4954cd551 /src/backend/mime.rs
parent75a82d3c2eaf1716a057bd5869f7b996965075b7 (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.rs22
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)
+ }
+}
+