can-dbc 9.0.0

A parser for the DBC format. The DBC format is used to exchange CAN network data.
Documentation
use can_dbc_pest::{Pair, Rule};

use crate::DbcError;

#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ValueType {
    Signed,
    Unsigned,
}

impl TryFrom<Pair<'_, Rule>> for ValueType {
    type Error = DbcError;

    fn try_from(value: Pair<'_, Rule>) -> Result<Self, Self::Error> {
        match value.as_rule() {
            Rule::signed_type => Ok(Self::Signed),
            Rule::unsigned_type => Ok(Self::Unsigned),
            v => Err(DbcError::UnknownRule(v)),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::test_helpers::*;

    #[test]
    fn value_type_test() {
        let val = test_into::<ValueType>("-", Rule::signed_type);
        assert_eq!(val, ValueType::Signed);

        let val = test_into::<ValueType>("+", Rule::unsigned_type);
        assert_eq!(val, ValueType::Unsigned);
    }
}