use serde_json::Value as JsonValue;
use time::OffsetDateTime;
pub(super) fn parse_json_i64ish(value: &JsonValue) -> Option<i64> {
value
.as_i64()
.or_else(|| value.as_u64().and_then(|raw| i64::try_from(raw).ok()))
.or_else(|| value.as_str().and_then(|raw| raw.parse::<i64>().ok()))
}
pub(super) fn json_stringish(raw: &JsonValue, fields: &[&str]) -> Option<String> {
fields.iter().find_map(|field| {
let value = raw.get(*field)?;
value
.as_str()
.map(ToString::to_string)
.or_else(|| parse_json_i64ish(value).map(|number| number.to_string()))
.or_else(|| value.as_u64().map(|number| number.to_string()))
})
}
pub(super) fn parse_rfc3339(text: &str) -> Option<OffsetDateTime> {
OffsetDateTime::parse(text, &time::format_description::well_known::Rfc3339).ok()
}