use cadmpeg_ir::ids::{Identity, IdentityComponent, IdentityKey, IdentityNamespace, UnknownId};
pub(crate) type IdentityKind = IdentityComponent;
static FORMAT: IdentityComponent = cadmpeg_ir::identity_component!("step");
static SCOPE_FILE: IdentityComponent = cadmpeg_ir::identity_component!("file");
static SCOPE_DATA: IdentityComponent = cadmpeg_ir::identity_component!("data");
static SCOPE_PRODUCT: IdentityComponent = cadmpeg_ir::identity_component!("product");
static SCOPE_PRESENTATION: IdentityComponent = cadmpeg_ir::identity_component!("presentation");
static SCOPE_CONSTRUCTION: IdentityComponent = cadmpeg_ir::identity_component!("construction");
static SCOPE_TESSELLATION: IdentityComponent = cadmpeg_ir::identity_component!("tessellation");
static SCOPE_DRAWING: IdentityComponent = cadmpeg_ir::identity_component!("drawing");
macro_rules! kind {
($literal:literal) => {{
static KIND: $crate::ids::IdentityKind = cadmpeg_ir::identity_component!($literal);
&KIND
}};
}
pub(crate) use kind;
macro_rules! key_word {
($literal:literal) => {{
static KEY_WORD: cadmpeg_ir::ids::IdentityKey = cadmpeg_ir::identity_key!($literal);
KEY_WORD.clone()
}};
}
pub(crate) use key_word;
#[must_use]
pub(crate) fn signature(index: usize) -> UnknownId {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_FILE, kind!("signature"));
UnknownId::from(Identity::compose(&namespace, IdentityKey::from(index)))
}
pub(crate) fn header(offset: usize) -> UnknownId {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_FILE, kind!("header"));
UnknownId::from(Identity::compose(&namespace, IdentityKey::from(offset)))
}
pub(crate) fn omitted_record(offset: usize) -> UnknownId {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_FILE, kind!("omitted"));
UnknownId::from(Identity::compose(&namespace, IdentityKey::from(offset)))
}
#[must_use]
pub(crate) fn zip_declaration(offset: u64) -> UnknownId {
let namespace =
IdentityNamespace::from_components(&FORMAT, &SCOPE_FILE, kind!("zip-declaration"));
UnknownId::from(Identity::compose(&namespace, IdentityKey::from(offset)))
}
#[must_use]
pub(crate) fn data(kind: &IdentityKind, key: impl Into<IdentityKey>) -> Identity {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_DATA, kind);
Identity::compose(&namespace, key)
}
#[must_use]
pub(crate) fn product(kind: &IdentityKind, key: impl Into<IdentityKey>) -> Identity {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_PRODUCT, kind);
Identity::compose(&namespace, key)
}
#[must_use]
pub(crate) fn presentation(kind: &IdentityKind, key: impl Into<IdentityKey>) -> Identity {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_PRESENTATION, kind);
Identity::compose(&namespace, key)
}
#[must_use]
pub(crate) fn construction(kind: &IdentityKind, key: impl Into<IdentityKey>) -> Identity {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_CONSTRUCTION, kind);
Identity::compose(&namespace, key)
}
#[must_use]
pub(crate) fn tessellation(kind: &IdentityKind, key: impl Into<IdentityKey>) -> Identity {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_TESSELLATION, kind);
Identity::compose(&namespace, key)
}
#[must_use]
pub(crate) fn drawing(kind: &IdentityKind, key: impl Into<IdentityKey>) -> Identity {
let namespace = IdentityNamespace::from_components(&FORMAT, &SCOPE_DRAWING, kind);
Identity::compose(&namespace, key)
}
#[cfg(test)]
mod tests;