can_dbc/ast/
access_type.rs

1use can_dbc_pest::{Pair, Rule};
2
3use crate::parser::{parse_uint, single_inner, validated};
4use crate::DbcError;
5
6#[derive(Copy, Clone, Debug, PartialEq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub enum AccessType {
9    DummyNodeVector0,
10    DummyNodeVector1,
11    DummyNodeVector2,
12    DummyNodeVector3,
13}
14
15impl TryFrom<Pair<'_, Rule>> for AccessType {
16    type Error = DbcError;
17
18    fn try_from(value: Pair<'_, Rule>) -> Result<Self, Self::Error> {
19        let pair = validated(value, Rule::access_type)?;
20        let value = parse_uint(&single_inner(pair, Rule::uint)?)?;
21
22        Ok(match value {
23            0 => Self::DummyNodeVector0,
24            1 => Self::DummyNodeVector1,
25            2 => Self::DummyNodeVector2,
26            3 => Self::DummyNodeVector3,
27            // FIXME: is this correct?
28            _ => AccessType::DummyNodeVector0,
29        })
30    }
31}