can_dbc/ast/
version.rs

1use can_dbc_pest::{Pair, Rule};
2
3use crate::parser::{inner_str, single_inner, validated, DbcError};
4
5/// Version identifier of the DBC file.
6///
7/// Format: `VERSION "<VersionIdentifier>"`
8#[derive(Clone, Debug, Default, PartialEq)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct Version(pub String);
11
12impl TryFrom<Pair<'_, Rule>> for Version {
13    type Error = DbcError;
14
15    fn try_from(value: Pair<'_, Rule>) -> Result<Self, Self::Error> {
16        let v = single_inner(validated(value, Rule::version)?, Rule::quoted_str)?;
17        Ok(Self(inner_str(v)))
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    use crate::test_helpers::*;
25
26    #[test]
27    fn version_test() {
28        let def = r#"
29VERSION "HNPBNNNYNNNNNNNNNNNNNNNNNNNNNNNNYNYYYYYYYY>4>%%%/4>'%**4YYY///"
30"#;
31        let exp =
32            Version("HNPBNNNYNNNNNNNNNNNNNNNNNNNNNNNNYNYYYYYYYY>4>%%%/4>'%**4YYY///".to_string());
33        let val = test_into::<Version>(def.trim_start(), Rule::version);
34        assert_eq!(val, exp);
35    }
36}