rusty_falcon 0.7.1

Rust bindings for CrowdStrike Falcon API
Documentation
use serde::Deserialize;

pub fn deserialize_null_default<'de, D, T>(deserializer: D) -> Result<T, D::Error>
where
    D: serde::Deserializer<'de>,
    T: Default + serde::Deserialize<'de>,
{
    Option::<T>::deserialize(deserializer).map(|opt| opt.unwrap_or_default())
}

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

    #[derive(Debug, Deserialize, PartialEq)]
    struct TestStruct {
        #[serde(default, deserialize_with = "deserialize_null_default")]
        items: Vec<String>,
    }

    #[test]
    fn test_deserializes_null_as_empty_vec() {
        let json = r#"{"items": null}"#;
        let result: TestStruct = serde_json::from_str(json).unwrap();
        assert_eq!(result.items, Vec::<String>::new());
    }

    #[test]
    fn test_deserializes_missing_field_as_empty_vec() {
        let json = r#"{}"#;
        let result: TestStruct = serde_json::from_str(json).unwrap();
        assert_eq!(result.items, Vec::<String>::new());
    }

    #[test]
    fn test_deserializes_populated_array() {
        let json = r#"{"items": ["a", "b"]}"#;
        let result: TestStruct = serde_json::from_str(json).unwrap();
        assert_eq!(result.items, vec!["a", "b"]);
    }

    #[test]
    fn test_deserializes_empty_array() {
        let json = r#"{"items": []}"#;
        let result: TestStruct = serde_json::from_str(json).unwrap();
        assert_eq!(result.items, Vec::<String>::new());
    }
}