use crate::payload::{Body, Payload, TextBlockData};
pub fn parse_options<T: serde::de::DeserializeOwned + Default>(
raw: Option<&toml::Value>,
) -> Result<T, String> {
match raw {
None => Ok(T::default()),
Some(value) => value
.clone()
.try_into::<T>()
.map_err(|e| format!("invalid options: {e}")),
}
}
pub fn placeholder(msg: &str) -> Payload {
Payload {
icon: None,
status: None,
format: None,
body: Body::TextBlock(TextBlockData {
lines: vec![
format!("⚠ {msg}"),
"check [widget.options] in config".into(),
],
}),
}
}
pub fn bare(body: Body) -> Payload {
Payload {
icon: None,
status: None,
format: None,
body,
}
}