can_dbc/ast/
value_type.rs

1use can_dbc_pest::{Pair, Rule};
2
3use crate::DbcError;
4
5#[derive(Copy, Clone, Debug, PartialEq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub enum ValueType {
8    Signed,
9    Unsigned,
10}
11
12impl TryFrom<Pair<'_, Rule>> for ValueType {
13    type Error = DbcError;
14
15    fn try_from(value: Pair<'_, Rule>) -> Result<Self, Self::Error> {
16        match value.as_rule() {
17            Rule::signed_type => Ok(Self::Signed),
18            Rule::unsigned_type => Ok(Self::Unsigned),
19            v => Err(DbcError::UnknownRule(v)),
20        }
21    }
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27    use crate::test_helpers::*;
28
29    #[test]
30    fn value_type_test() {
31        let val = test_into::<ValueType>("-", Rule::signed_type);
32        assert_eq!(val, ValueType::Signed);
33
34        let val = test_into::<ValueType>("+", Rule::unsigned_type);
35        assert_eq!(val, ValueType::Unsigned);
36    }
37}