use cadmpeg_ir::{CadIr, DecodeReport, DecodeResult, SourceFidelity};
#[derive(Debug, Clone, PartialEq)]
pub struct LoadedDocument {
pub ir: CadIr,
pub origin: LoadOrigin,
}
#[derive(Debug, Clone, PartialEq)]
#[allow(clippy::large_enum_variant)]
pub enum LoadOrigin {
Neutral,
Decoded {
report: DecodeReport,
fidelity: SourceFidelity,
},
}
impl LoadedDocument {
pub const fn neutral(ir: CadIr) -> Self {
Self {
ir,
origin: LoadOrigin::Neutral,
}
}
pub fn decoded(result: DecodeResult) -> Self {
let (ir, report, fidelity) = result.into_parts();
Self {
ir,
origin: LoadOrigin::Decoded { report, fidelity },
}
}
pub const fn decode_report(&self) -> Option<&DecodeReport> {
match &self.origin {
LoadOrigin::Neutral => None,
LoadOrigin::Decoded { report, .. } => Some(report),
}
}
pub const fn fidelity(&self) -> Option<&SourceFidelity> {
match &self.origin {
LoadOrigin::Neutral => None,
LoadOrigin::Decoded { fidelity, .. } => Some(fidelity),
}
}
}