mrmime 0.0.2

Small, explicit MIME type registry with fast lookup by type or extension.
use crate::MimeType;
use diesel::{
    backend::Backend,
    deserialize::FromSql,
    serialize::{Output, ToSql},
    sql_types::Text,
};
use std::str::FromStr;

impl<DB> ToSql<Text, DB> for MimeType
where
    DB: Backend,
    str: ToSql<Text, DB>,
{
    fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, DB>) -> diesel::serialize::Result {
        self.mime.to_sql(out)
    }
}

impl<DB> FromSql<Text, DB> for MimeType
where
    DB: Backend,
    String: diesel::deserialize::FromSql<Text, DB>,
{
    fn from_sql(bytes: DB::RawValue<'_>) -> diesel::deserialize::Result<Self> {
        let s = String::from_sql(bytes)?;
        let v = MimeType::from_str(&s)
            .map_err(|e| diesel::result::Error::DeserializationError(Box::new(e)))?;
        Ok(v)
    }
}