use attribute_derive::FromAttr;
use thiserror::Error;
use crate::Attributes;
#[derive(Debug, Error)]
enum VersionAttrsError {
#[error("`root_uri` was not declared")]
RootURINotDeclared
}
#[derive(FromAttr, Debug)]
#[attribute(ident = version)]
struct VersionAttrs {
legacy: Option<bool>,
root_uri: Option<String>,
data_uri: Option<String>,
}
pub fn derive_version_parse_root_uri(attrs: &Attributes) -> anyhow::Result<String> {
VersionAttrs::from_attributes(attrs)?
.root_uri
.ok_or(VersionAttrsError::RootURINotDeclared.into())
}
pub fn derive_version_parse_data_uri(attrs: &Attributes) -> anyhow::Result<String> {
let va = VersionAttrs::from_attributes(attrs)?;
va
.data_uri
.or(va.root_uri)
.ok_or(VersionAttrsError::RootURINotDeclared.into())
}
pub fn derive_version_parse_legacy(attrs: &Attributes) -> bool {
VersionAttrs::from_attributes(attrs)
.unwrap()
.legacy
.unwrap_or_default()
}