use std::str::FromStr;
#[derive(Debug, thiserror::Error, miette::Diagnostic)]
#[error(transparent)]
pub(crate) enum Error {
#[error("error parsing Duration: {0}")]
Duration(String),
Io(#[from] std::io::Error),
ParseInt(#[from] std::num::ParseIntError),
#[error("error parsing LimitedNonZeroU8: {0}")]
ParseLimitedNonZeroU8(String),
Yaml(#[from] serde_yml::Error),
}
pub(crate) fn unknown(s: &str) -> Result<bsky_sdk::api::types::Unknown, Error> {
match s.strip_prefix('@') {
None => serde_yml::from_str(s),
Some(s) => {
let path = camino::Utf8PathBuf::from(s);
let yaml = fs_err::read_to_string(path)?;
serde_yml::from_str(&yaml)
}
}
.map_err(Into::into)
}
pub(crate) fn limited_non_zero_u8<const MAX: u8>(
s: &str,
) -> Result<bsky_sdk::api::types::LimitedNonZeroU8<MAX>, Error> {
bsky_sdk::api::types::LimitedNonZeroU8::try_from(u8::from_str(s)?).map_err(Error::ParseLimitedNonZeroU8)
}
pub(crate) fn duration(s: &str) -> Result<std::time::Duration, Error> {
duration_str::parse(s).map_err(Error::Duration)
}