serde-humanize-rs 0.1.0

A Serde deserializer for duration and byte-size.
Documentation
use de::DE;
use humanize_rs::bytes::Bytes;
use serde::de::{Deserializer, Error, Unexpected, Visitor};
use std::fmt;

impl DE for usize {
    fn de<'de, D>(d: D) -> Result<Self, D::Error>
    where
        Self: Sized,
        D: Deserializer<'de>,
    {
        struct V;

        impl<'v> Visitor<'v> for V {
            type Value = usize;

            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
                formatter.write_str("expecting byte-size")
            }

            fn visit_str<E>(self, s: &str) -> Result<usize, E>
            where
                E: Error,
            {
                let bytes = s
                    .parse::<Bytes>()
                    .map_err(|_| Error::invalid_value(Unexpected::Str(s), &self))?;

                Ok(bytes.size())
            }
        }

        d.deserialize_str(V)
    }
}