fn ddbjson_val_to_attrval()

in src/batch.rs [408:470]


fn ddbjson_val_to_attrval(ddb_jsonval: &JsonValue) -> Option<AttributeValue> {
    // prepare shared logic that can be used for both SS and NS.
    let set_logic = |val: &JsonValue| -> Vec<String> {
        val.as_array()
            .expect("should be valid JSON array")
            .iter()
            .map(|el| el.as_str().expect("should -> str").to_string())
            .collect::<Vec<String>>()
    };

    // following list of if-else statements would be return value of this function.
    if let Some(x) = ddb_jsonval.get("S") {
        Some(AttributeValue {
            s: Some(x.as_str().unwrap().to_string()),
            ..Default::default()
        })
    } else if let Some(x) = ddb_jsonval.get("N") {
        Some(AttributeValue {
            n: Some(x.as_str().unwrap().to_string()),
            ..Default::default()
        })
    } else if let Some(x) = ddb_jsonval.get("BOOL") {
        Some(AttributeValue {
            bool: Some(x.as_bool().unwrap()),
            ..Default::default()
        })
    } else if let Some(x) = ddb_jsonval.get("SS") {
        Some(AttributeValue {
            ss: Some(set_logic(x)),
            ..Default::default()
        })
    } else if let Some(x) = ddb_jsonval.get("NS") {
        Some(AttributeValue {
            ns: Some(set_logic(x)),
            ..Default::default()
        })
    } else if let Some(x) = ddb_jsonval.get("L") {
        let list_element = x
            .as_array()
            .unwrap()
            .iter()
            .map(|el| ddbjson_val_to_attrval(el).expect("failed to digest a list element"))
            .collect::<Vec<AttributeValue>>();
        debug!("List Element: {:?}", list_element);
        Some(AttributeValue {
            l: Some(list_element),
            ..Default::default()
        })
    } else if let Some(x) = ddb_jsonval.get("M") {
        let inner_map: HashMap<String, AttributeValue> = ddbjson_attributes_to_attrvals(x);
        Some(AttributeValue {
            m: Some(inner_map),
            ..Default::default()
        })
    } else if ddb_jsonval.get("NULL").is_some() {
        Some(AttributeValue {
            null: Some(true),
            ..Default::default()
        })
    } else {
        None
    }
}