can_dbc/ast/
val_description.rs

1use can_dbc_pest::{Pair, Rule};
2
3use crate::parser::{expect_empty, parse_next_inner_str, parse_next_int, validated_inner};
4
5#[derive(Clone, Debug, PartialEq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct ValDescription {
8    pub id: i64,
9    pub description: String,
10}
11
12impl TryFrom<Pair<'_, Rule>> for ValDescription {
13    type Error = crate::parser::DbcError;
14
15    fn try_from(value: Pair<Rule>) -> Result<Self, Self::Error> {
16        let mut pairs = validated_inner(value, Rule::table_value_description)?;
17        let id = parse_next_int(&mut pairs, Rule::int)?;
18        let description = parse_next_inner_str(&mut pairs, Rule::quoted_str)?;
19        expect_empty(&pairs)?;
20        Ok(Self { id, description })
21    }
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27    use crate::test_helpers::*;
28
29    #[test]
30    fn value_description_test() {
31        let def = r#"
322 "ABC"
33"#;
34        let exp = ValDescription {
35            id: 2,
36            description: "ABC".to_string(),
37        };
38        let val = test_into::<ValDescription>(def.trim_start(), Rule::table_value_description);
39        assert_eq!(val, exp);
40    }
41}