1use can_dbc_pest::{Pair, Rule};
2
3use crate::parser::{validated, DbcError};
4
5#[derive(Clone, Debug, PartialEq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct Node(pub String);
9
10impl TryFrom<Pair<'_, Rule>> for Node {
11 type Error = DbcError;
12
13 fn try_from(value: Pair<Rule>) -> Result<Self, Self::Error> {
14 Ok(Self(
15 validated(value, Rule::node_name)?.as_str().to_string(),
16 ))
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use crate::parser::collect_all;
24 use crate::test_helpers::*;
25
26 #[test]
27 fn network_node_test() {
28 let def = "
29BU_: ZU XYZ ABC OIU
30";
31 let exp = vec![
32 Node("ZU".to_string()),
33 Node("XYZ".to_string()),
34 Node("ABC".to_string()),
35 Node("OIU".to_string()),
36 ];
37 let pair = parse(def.trim_start(), Rule::nodes).unwrap();
38 let val: Vec<Node> = collect_all(&mut pair.into_inner()).unwrap();
39 assert_eq!(val, exp);
40 }
41
42 #[test]
43 fn empty_network_node_test() {
44 let def = "
45BU_:
46";
47 let pair = parse(def.trim_start(), Rule::nodes).unwrap();
48 let val: Vec<Node> = collect_all(&mut pair.into_inner()).unwrap();
49 assert_eq!(val, vec![]);
50 }
51}