twilio_rust 0.1.0

An async client library for Twilio based on hyper
Documentation
use serde::{self, Deserialize, Deserializer};
use serde_json::Value;
use serde::de::Error;
use chrono::prelude::*;

pub fn deserialize_rfc2822<'de, D>(deserializer: D) -> Result<Option<DateTime<Utc>>, D::Error>
where
    D: Deserializer<'de>,
{
    let value = Value::deserialize(deserializer)?;
    match value {
        Value::Null => Ok(None),
        Value::String(s) => DateTime::parse_from_rfc2822(&s)
            .map(|dt| dt.with_timezone(&Utc))
            .map_err(serde::de::Error::custom)
            .map(|dt| Some(dt)),
        _ => Err(Error::custom(String::from("Expected string or null"))),
        }
}

pub fn deserialize_str_to_u32<'de, D>(deserializer: D) -> Result<Option<u32>, D::Error>
    where D: Deserializer<'de> {
    let value = Value::deserialize(deserializer)?;
    match value {
        Value::Null => Ok(None),
        Value::String(s) => s.parse::<u32>()
            .map(|x| Some(x))
            .map_err(serde::de::Error::custom),
        _ => Err(Error::custom(String::from("Expected string or null"))),
    }
}