chatwork 0.1.0

Chatwork API client.
Documentation
use serde::Serializer;

pub fn bool_to_u8<S>(v: &bool, serializer: S) -> Result<S::Ok, S::Error>
where
    S: Serializer,
{
    serializer.serialize_u8(if *v { 1 } else { 0 })
}

pub fn opt_bool_to_u8<S>(v: &Option<bool>, serializer: S) -> Result<S::Ok, S::Error>
where
    S: Serializer,
{
    match v {
        Some(v) => bool_to_u8(v, serializer),
        None => serializer.serialize_none(),
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_bool_to_u8() {
        #[derive(serde::Serialize)]
        struct S {
            #[serde(serialize_with = "bool_to_u8")]
            v: bool,
        }
        assert_eq!(serde_urlencoded::to_string(&S { v: false }).unwrap(), "v=0");
        assert_eq!(serde_urlencoded::to_string(&S { v: true }).unwrap(), "v=1");
    }

    #[test]
    fn test_opt_bool_to_u8() {
        #[derive(serde::Serialize)]
        struct S {
            #[serde(serialize_with = "opt_bool_to_u8")]
            v: Option<bool>,
        }
        assert_eq!(serde_urlencoded::to_string(&S { v: None }).unwrap(), "");
        assert_eq!(serde_urlencoded::to_string(&S { v: Some(false) }).unwrap(), "v=0");
        assert_eq!(serde_urlencoded::to_string(&S { v: Some(true) }).unwrap(), "v=1");
    }
}