can_dbc/ast/
environment_variable_data.rs

1use can_dbc_pest::{Pair, Rule};
2
3use crate::parser::{expect_empty, next_string, parse_next_uint, validated_inner, DbcError};
4
5#[derive(Clone, Debug, PartialEq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct EnvironmentVariableData {
8    pub env_var_name: String,
9    pub data_size: u64,
10}
11
12impl TryFrom<Pair<'_, Rule>> for EnvironmentVariableData {
13    type Error = DbcError;
14
15    fn try_from(value: Pair<'_, Rule>) -> Result<Self, Self::Error> {
16        let mut pairs = validated_inner(value, Rule::env_var_data)?;
17
18        let env_var_name = next_string(&mut pairs, Rule::env_var_name)?;
19        let data_size = parse_next_uint(&mut pairs, Rule::data_size)?;
20        expect_empty(&pairs)?;
21
22        Ok(Self {
23            env_var_name,
24            data_size,
25        })
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use super::*;
32    use crate::test_helpers::*;
33
34    #[test]
35    fn envvar_data_test() {
36        let def = "
37ENVVAR_DATA_ SomeEnvVarData: 399;
38";
39        let exp = EnvironmentVariableData {
40            env_var_name: "SomeEnvVarData".to_string(),
41            data_size: 399,
42        };
43        let val = test_into::<EnvironmentVariableData>(def.trim_start(), Rule::env_var_data);
44        assert_eq!(val, exp);
45    }
46}