embargo-cpp 0.1.1

A C++ build tool for the modern world.
Documentation
use serde::{de::{self, Visitor}, Deserializer, Serializer};

pub fn serialize_modified<S>(modified: &u64, s: S) -> Result<S::Ok, S::Error>
where 
    S: Serializer,
{
    let mod_str = format!("{:X}", modified);
    s.serialize_str(&mod_str)
}

pub fn deserialize_modified<'de, D>(d: D) -> Result<u64, D::Error>
where 
    D: Deserializer<'de>
{
    struct ModifiedVisitor;

    impl<'de> Visitor<'de> for ModifiedVisitor {
        type Value = u64;
        
        fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
            formatter.write_str("a hex value that maps to a u64")
        }

        fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
        where 
            E: de::Error {
                match u64::from_str_radix(value, 16) {
                    Ok(n) => Ok(n),
                    Err(_) => Err(E::custom("Input must be a hex string!".to_string()))
                }
                
            }
    }
    d.deserialize_any(ModifiedVisitor)
}