1use can_dbc_pest::{Pair, Rule};
2
3use crate::parser::{inner_str, single_inner, validated, DbcError};
4
5#[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}