use std::path::PathBuf;
use crate::core::Dataset;
use super::Format;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Stage {
Source,
Destination,
Assumption,
}
impl Stage {
#[must_use]
pub fn name(self) -> &'static str {
match self {
Self::Source => "source",
Self::Destination => "destination",
Self::Assumption => "assumption",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AssumptionKind {
BasicFrame,
ZeroRotations,
SyntheticZero,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Omission {
pub stage: Stage,
pub assumption: Option<AssumptionKind>,
pub detail: String,
}
impl Omission {
pub(super) fn new(stage: Stage, detail: impl Into<String>) -> Self {
Self {
stage,
assumption: None,
detail: detail.into(),
}
}
pub fn assumed(kind: AssumptionKind, detail: impl Into<String>) -> Self {
Self {
stage: Stage::Assumption,
assumption: Some(kind),
detail: detail.into(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct ReadResult {
pub format: Format,
pub dataset: Dataset,
pub omissions: Vec<Omission>,
pub generated_point_ids: bool,
pub assumed_zero: bool,
}
#[derive(Debug, Default, Clone, PartialEq, Eq)]
pub struct ConversionReport {
pub points: usize,
pub cells: usize,
pub fields: usize,
pub omissions: Vec<Omission>,
pub mesh_output: Option<CompanionReport>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CompanionReport {
pub path: PathBuf,
pub format: Format,
pub omissions: Vec<Omission>,
}