pub mod adaptive;
pub mod buf;
pub mod cache;
pub mod collections;
pub mod concurrency;
pub mod diag;
pub mod diag_kernel;
pub mod env;
pub use diag::{DiagConfig, Slot, Span, jstr};
pub mod fs;
pub mod fs_atomic;
pub mod hash;
pub mod http;
pub mod io;
pub mod path;
pub mod pkg;
pub mod snapshot;
pub mod url;
use serde::{Deserialize, Deserializer};
pub fn string_or_seq<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
where
D: Deserializer<'de>,
{
let value = Option::<serde_json::Value>::deserialize(deserializer)?;
Ok(match value {
None | Some(serde_json::Value::Null) => Vec::new(),
Some(serde_json::Value::String(s)) => vec![s],
Some(serde_json::Value::Array(values)) => values
.into_iter()
.filter_map(|value| match value {
serde_json::Value::String(s) => Some(s),
_ => None,
})
.collect(),
Some(_) => Vec::new(),
})
}