blob: 9ea1cb85931e93dca8dac535b723cce55940f5b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
use anyhow::Error;
#[derive(Debug, Eq, PartialEq)]
pub struct MimeType(mime::Mime);
impl From<mime::Mime> for MimeType {
fn from(mime: mime::Mime) -> Self {
MimeType(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)
}
}
|