tovuk 0.1.67

Deploy Rust workers, static frontends, and worker-static apps to Tovuk.
use serde_json::Value;

pub(crate) fn string_field(value: &Value, key: &str) -> String {
    value
        .get(key)
        .and_then(Value::as_str)
        .unwrap_or_default()
        .to_owned()
}

pub(crate) fn number_field(value: &Value, key: &str) -> u64 {
    value.get(key).and_then(Value::as_u64).unwrap_or_else(|| {
        value
            .get(key)
            .and_then(Value::as_i64)
            .and_then(|value| u64::try_from(value).ok())
            .unwrap_or(0)
    })
}

pub(crate) fn string_alias(value: &Value, aliases: &[&str]) -> String {
    aliases
        .iter()
        .find_map(|alias| value.get(alias).and_then(Value::as_str))
        .unwrap_or_default()
        .to_owned()
}

pub(crate) fn number_alias(value: &Value, aliases: &[&str]) -> Option<u64> {
    aliases
        .iter()
        .find_map(|alias| value.get(alias).and_then(Value::as_u64))
}

pub(crate) fn nested_string(value: &Value, path: &[&str]) -> String {
    let mut cursor = value;
    for part in path {
        cursor = cursor.get(part).unwrap_or(&Value::Null);
    }
    cursor.as_str().unwrap_or_default().to_owned()
}