use alloc::string::String;
use alloc::vec::Vec;
#[non_exhaustive]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone)]
pub enum DecisionStep {
Accepted {
adjustments: Vec<Adjustment>,
},
Rejected {
details: String,
},
PreferenceApplied {
rule: String,
},
}
#[non_exhaustive]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone)]
pub enum Adjustment {
BitDepthReduced {
from: u8,
to: u8,
},
ColorEncodingChanged {
details: String,
},
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone)]
pub struct ReasoningTrace {
pub steps: Vec<DecisionStep>,
}
impl ReasoningTrace {
pub fn new() -> Self {
Self { steps: Vec::new() }
}
}
impl Default for ReasoningTrace {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_returns_empty_trace() {
let trace = ReasoningTrace::default();
assert!(trace.steps.is_empty());
}
}