Skip to main content

openbim_gaeb/
metadata.rs

1use crate::{ExchangePhase, GaebVersion};
2
3/// Evidence and generator information extracted from a GAEB document.
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct Metadata {
6    /// Root element namespace, preserved verbatim.
7    pub namespace: String,
8    /// Namespace-first effective version. Inspect diagnostics when evidence differs.
9    pub version: Option<GaebVersion>,
10    /// Version encoded structurally by the namespace, when available.
11    pub namespace_version: Option<GaebVersion>,
12    /// Version declared by `<GAEBInfo><Version>`.
13    pub declared_version: Option<GaebVersion>,
14    /// Uninterpreted `<Version>` text, including future values.
15    pub version_text: Option<String>,
16    pub version_date: Option<String>,
17    /// Namespace-first effective exchange phase.
18    pub phase: Option<ExchangePhase>,
19    /// Phase encoded structurally by a 3.2+ namespace.
20    pub namespace_phase: Option<ExchangePhase>,
21    /// Phase declared by `<DP>`.
22    pub declared_phase: Option<ExchangePhase>,
23    /// Uninterpreted `<DP>` text, including future values.
24    pub phase_code: Option<String>,
25    pub date: Option<String>,
26    pub time: Option<String>,
27    pub program_system: Option<String>,
28    pub program_name: Option<String>,
29}
30
31impl Metadata {
32    pub(crate) fn new(namespace: String) -> Self {
33        Self {
34            namespace,
35            version: None,
36            namespace_version: None,
37            declared_version: None,
38            version_text: None,
39            version_date: None,
40            phase: None,
41            namespace_phase: None,
42            declared_phase: None,
43            phase_code: None,
44            date: None,
45            time: None,
46            program_system: None,
47            program_name: None,
48        }
49    }
50}