Files
tuliprox/shared/src/model/processing_order.rs
T

70 lines
2.0 KiB
Rust
Raw Normal View History

2025-05-04 10:59:08 +02:00
use std::fmt::Display;
2025-11-03 21:19:35 +01:00
use std::str::FromStr;
2025-05-04 10:59:08 +02:00
use enum_iterator::Sequence;
2025-05-26 13:57:29 +02:00
#[derive(Debug, Copy, Clone, serde::Serialize, serde::Deserialize, Sequence, PartialEq, Eq, Default)]
2025-05-04 10:59:08 +02:00
pub enum ProcessingOrder {
#[serde(rename = "frm")]
#[default]
Frm,
#[serde(rename = "fmr")]
Fmr,
#[serde(rename = "rfm")]
Rfm,
#[serde(rename = "rmf")]
Rmf,
#[serde(rename = "mfr")]
Mfr,
#[serde(rename = "mrf")]
Mrf,
}
impl ProcessingOrder {
const FRM: &'static str = "filter, rename, map";
const FMR: &'static str = "filter, map, rename";
const RFM: &'static str = "rename, filter, map";
const RMF: &'static str = "rename, map, filter";
const MFR: &'static str = "map, filter, rename";
const MRF: &'static str = "map, rename, filter";
}
impl Display for ProcessingOrder {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", match *self {
Self::Frm => Self::FRM,
Self::Fmr => Self::FMR,
Self::Rfm => Self::RFM,
Self::Rmf => Self::RMF,
Self::Mfr => Self::MFR,
Self::Mrf => Self::MRF,
})
}
2025-11-03 21:19:35 +01:00
}
impl FromStr for ProcessingOrder {
type Err = &'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let normalized = s.trim().to_lowercase();
match normalized.as_str() {
// Short codes
"frm" => Ok(Self::Frm),
"fmr" => Ok(Self::Fmr),
"rfm" => Ok(Self::Rfm),
"rmf" => Ok(Self::Rmf),
"mfr" => Ok(Self::Mfr),
"mrf" => Ok(Self::Mrf),
// Accept the exact Display text (using your constants)
x if x == Self::FRM => Ok(Self::Frm),
x if x == Self::FMR => Ok(Self::Fmr),
x if x == Self::RFM => Ok(Self::Rfm),
x if x == Self::RMF => Ok(Self::Rmf),
x if x == Self::MFR => Ok(Self::Mfr),
x if x == Self::MRF => Ok(Self::Mrf),
_ => Err("invalid processing order"),
}
}
2025-05-04 10:59:08 +02:00
}