use super::{error::NotGroupMemberError, xml::XmlNode};
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
pub trait XsdType
where
Self: Sized,
{
fn from_xml_element(xml_node: &XmlNode) -> Result<Self>;
}
pub trait XsdChoice: XsdType {
fn is_choice_member<T: AsRef<str>>(node_name: T) -> bool;
fn try_from_xml_element(xml_node: &XmlNode) -> Option<Result<Self>> {
match Self::from_xml_element(xml_node) {
Ok(val) => Some(Ok(val)),
Err(err) => match err.downcast::<NotGroupMemberError>() {
Ok(_) => None,
Err(err) => Some(Err(err)),
},
}
}
}