use serde::{Deserialize, Serialize};
pub mod alpide_stats;
#[derive(Default, PartialEq, Debug, Serialize, Deserialize)]
pub struct ItsStats {
layer_staves_seen: Vec<(u8, u8)>,
}
impl ItsStats {
pub fn record_layer_stave_seen(&mut self, layer_stave: (u8, u8)) {
if !self.layer_staves_seen.contains(&layer_stave) {
self.layer_staves_seen.push(layer_stave);
}
}
pub fn layer_staves_as_slice(&self) -> &[(u8, u8)] {
&self.layer_staves_seen
}
pub(super) fn validate_other(&self, other: &Self) -> Result<(), Vec<String>> {
let other = Self {
layer_staves_seen: other.layer_staves_seen.clone(),
};
self.validate_fields(&other)
}
crate::validate_fields!(ItsStats, layer_staves_seen);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serde_consistency() {
let mut its_stats = ItsStats::default();
its_stats.record_layer_stave_seen((1, 2));
its_stats.record_layer_stave_seen((3, 4));
its_stats.record_layer_stave_seen((5, 6));
let its_stats_ser_json = serde_json::to_string(&its_stats).unwrap();
let its_stats_de_json: ItsStats = serde_json::from_str(&its_stats_ser_json).unwrap();
assert_eq!(its_stats, its_stats_de_json);
let its_stats_ser_toml = toml::to_string(&its_stats).unwrap();
let its_stats_de_toml: ItsStats = toml::from_str(&its_stats_ser_toml).unwrap();
assert_eq!(its_stats, its_stats_de_toml);
}
}