use serde_json::Value;
pub(super) fn string_field<'a>(value: &'a Value, field: &str) -> &'a str {
value.get(field).and_then(Value::as_str).unwrap_or_default()
}
pub(super) fn usize_field(value: &Value, field: &str) -> usize {
value
.get(field)
.and_then(Value::as_u64)
.and_then(|number| usize::try_from(number).ok())
.unwrap_or_default()
}
pub(super) fn float_field(value: &Value, field: &str) -> f64 {
value.get(field).and_then(Value::as_f64).unwrap_or_default()
}
pub(super) fn string_array(value: Option<&Value>) -> Vec<String> {
value
.and_then(Value::as_array)
.into_iter()
.flatten()
.filter_map(Value::as_str)
.map(ToOwned::to_owned)
.collect()
}