use alloc::vec::Vec;
pub mod applied;
pub mod corba;
pub mod flatdata;
pub mod ros2;
pub mod source;
pub mod vendor;
pub mod xml;
pub mod xtypes;
pub use applied::{AppliedAnnotation, AppliedArgument};
pub use corba::{
ComponentRole, CorbaFacet, HomeManages, RepositoryIdOrigin, StateVisibility, TemplateArg,
TemplateParam, TemplateParamKind,
};
pub use flatdata::FlatDataFacet;
pub use ros2::{Ros2Facet, RosBoundedOrigin, RosInterfaceRole};
pub use source::{ByteSpan, MacroExpansion, SourceFacet, SourceOrigin};
pub use vendor::{CoreDxFacet, FastDdsFacet, OpenDdsFacet, RtiFacet, VendorFacets, VendorKind};
pub use xml::XmlFacet;
pub use xtypes::{
AutoId, DataRepresentationMask, Extensibility, MemberIdAssignment, MemberIdOrigin,
RangeConstraint, TopicAnnotation, TryConstruct, VerbatimDirective, VerbatimPlacement,
XTypesFacet,
};
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct Facets {
pub source: SourceFacet,
pub xtypes: Option<XTypesFacet>,
pub corba: Option<CorbaFacet>,
pub ros2: Option<Ros2Facet>,
pub xml: Option<XmlFacet>,
pub flatdata: Option<FlatDataFacet>,
pub vendor: VendorFacets,
pub annotations: Vec<AppliedAnnotation>,
}
impl Facets {
#[must_use]
pub fn synthetic(reason: &'static str) -> Self {
Self {
source: SourceFacet::synthetic(reason),
..Self::default()
}
}
#[must_use]
pub fn builtin() -> Self {
Self {
source: SourceFacet::builtin(),
..Self::default()
}
}
pub fn xtypes_mut(&mut self) -> &mut XTypesFacet {
self.xtypes.get_or_insert_with(XTypesFacet::default)
}
pub fn corba_mut(&mut self) -> &mut CorbaFacet {
self.corba.get_or_insert_with(CorbaFacet::default)
}
pub fn ros2_mut(&mut self) -> &mut Ros2Facet {
self.ros2.get_or_insert_with(Ros2Facet::default)
}
pub fn xml_mut(&mut self) -> &mut XmlFacet {
self.xml.get_or_insert_with(XmlFacet::default)
}
pub fn flatdata_mut(&mut self) -> &mut FlatDataFacet {
self.flatdata.get_or_insert_with(FlatDataFacet::default)
}
#[must_use]
pub fn extensibility(&self) -> Option<Extensibility> {
self.xtypes.as_ref().and_then(|x| x.extensibility)
}
#[must_use]
pub fn is_key(&self) -> bool {
self.xtypes.as_ref().is_some_and(|x| x.is_key)
}
#[must_use]
pub fn is_optional(&self) -> bool {
self.xtypes.as_ref().is_some_and(|x| x.is_optional)
}
#[must_use]
pub fn is_must_understand(&self) -> bool {
self.xtypes.as_ref().is_some_and(|x| x.is_must_understand)
}
#[must_use]
pub fn effective_member_id(&self) -> Option<u32> {
self.xtypes
.as_ref()
.and_then(XTypesFacet::effective_member_id)
}
}