use crate::{DemInstruction, DemRepeatBlock, DetectorErrorModel};
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum DemAppendOperation {
Instruction(DemInstruction),
RepeatBlock(DemRepeatBlock),
DetectorErrorModel(DetectorErrorModel),
}
impl From<DemInstruction> for DemAppendOperation {
fn from(value: DemInstruction) -> Self {
Self::Instruction(value)
}
}
impl From<&DemInstruction> for DemAppendOperation {
fn from(value: &DemInstruction) -> Self {
Self::Instruction(value.clone())
}
}
impl From<DemRepeatBlock> for DemAppendOperation {
fn from(value: DemRepeatBlock) -> Self {
Self::RepeatBlock(value)
}
}
impl From<&DemRepeatBlock> for DemAppendOperation {
fn from(value: &DemRepeatBlock) -> Self {
Self::RepeatBlock(value.clone())
}
}
impl From<DetectorErrorModel> for DemAppendOperation {
fn from(value: DetectorErrorModel) -> Self {
Self::DetectorErrorModel(value)
}
}
impl From<&DetectorErrorModel> for DemAppendOperation {
fn from(value: &DetectorErrorModel) -> Self {
Self::DetectorErrorModel(value.clone())
}
}
#[cfg(test)]
mod tests {
use super::DemAppendOperation;
#[test]
fn borrowed_repeat_blocks_convert_into_append_operations() {
let body: crate::DetectorErrorModel = "error(0.125) D0".parse().unwrap();
let block = crate::DemRepeatBlock::new(2, &body).unwrap();
assert!(matches!(
DemAppendOperation::from(&block),
DemAppendOperation::RepeatBlock(_)
));
}
}