use crate::client::shared::{ExtensionTriple, IdentifiedData, TopLevelData};
use crate::{Iri, Resource};
pub trait SbolIdentified {
fn identified_data(&self) -> &IdentifiedData;
fn display_id(&self) -> Option<&str> {
self.identified_data().display_id.as_deref()
}
fn name(&self) -> Option<&str> {
self.identified_data().name.as_deref()
}
fn description(&self) -> Option<&str> {
self.identified_data().description.as_deref()
}
fn derived_from(&self) -> &[Resource] {
&self.identified_data().derived_from
}
fn generated_by(&self) -> &[Resource] {
&self.identified_data().generated_by
}
fn measures(&self) -> &[Resource] {
&self.identified_data().measures
}
fn extensions(&self) -> &[ExtensionTriple] {
&self.identified_data().extensions
}
}
pub trait SbolTopLevel: SbolIdentified {
fn top_level_data(&self) -> &TopLevelData;
fn namespace(&self) -> Option<&Iri> {
self.top_level_data().namespace.as_ref()
}
fn attachments(&self) -> &[Resource] {
&self.top_level_data().attachments
}
}
macro_rules! impl_sbol_identified {
($($ty:ty),+ $(,)?) => {
$(
impl $crate::client::accessors::SbolIdentified for $ty {
fn identified_data(&self) -> &$crate::client::shared::IdentifiedData {
&self.identified
}
}
)+
};
}
macro_rules! impl_sbol_top_level {
($($ty:ty),+ $(,)?) => {
$(
impl $crate::client::accessors::SbolTopLevel for $ty {
fn top_level_data(&self) -> &$crate::client::shared::TopLevelData {
&self.top_level
}
}
)+
};
}
pub(crate) use impl_sbol_identified;
pub(crate) use impl_sbol_top_level;