knuckles_parse/records/
model.rs1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3
4#[cfg(feature = "python")]
5use pyo3::prelude::*;
6
7#[cfg(feature = "python")]
8use knuckles_macro::pydefault;
9
10#[derive(Debug, Clone)]
30#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
31#[cfg_attr(feature = "python", pyclass(get_all, set_all))]
32#[cfg_attr(feature = "python", pydefault)]
33pub struct ModelRecord {
34 pub serial: u32,
36}
37
38impl ModelRecord {
39 pub fn new(str: &str) -> ModelRecord {
41 ModelRecord {
42 serial: str[10..14].trim().parse::<u32>().unwrap_or_default(),
43 }
44 }
45}
46
47impl From<&str> for ModelRecord {
48 fn from(str: &str) -> Self {
49 ModelRecord::new(str)
50 }
51}
52
53impl std::fmt::Display for ModelRecord {
54 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
55 write!(f, "{:<1$}", format!("MODEL {:>4}", self.serial), 80)
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62 #[test]
63 fn test_model_record_new() {
64 let line = "MODEL 1";
65 let model = ModelRecord::new(line);
66 assert_eq!(model.serial, 1);
67 }
68 #[test]
69 fn test_model_record_from() {
70 let line = "MODEL 1";
71 let model = ModelRecord::from(line);
72 assert_eq!(model.serial, 1);
73 }
74 #[test]
75 fn test_model_record_display() {
76 let model = ModelRecord { serial: 1 };
77 let result =
78 "MODEL 1 ";
79 assert_eq!(format!("{}", model), result);
80 }
81}