11use can_dbc_pest:: { Pair , Rule } ;
22
33use crate :: ast:: { AccessNode , AccessType , EnvType } ;
4- use crate :: parser:: { parse_int, parse_min_max_int, parse_str, single_rule , DbcResult } ;
4+ use crate :: parser:: { parse_int, parse_min_max_int, parse_str, single_string , DbcResult } ;
55
66#[ derive( Clone , Debug , PartialEq ) ]
77#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
@@ -28,49 +28,25 @@ impl EnvironmentVariable {
2828 let mut unit = String :: new ( ) ;
2929 let mut initial_value = 0.0f64 ;
3030 let mut ev_id = 0i64 ;
31- let mut access_type = String :: new ( ) ;
31+ let mut access_type = AccessType :: DummyNodeVector0 ;
3232 let mut access_nodes = Vec :: new ( ) ;
3333
3434 for pairs in pair. into_inner ( ) {
3535 match pairs. as_rule ( ) {
36- Rule :: env_var => {
37- let v = single_rule ( pairs, Rule :: env_var_name) ?;
38- name = v. as_str ( ) . to_string ( ) ;
39- }
36+ Rule :: env_var => name = single_string ( pairs, Rule :: env_var_name) ?,
4037 Rule :: env_var_type_int => env_type = Some ( EnvType :: Integer ) ,
4138 Rule :: env_var_type_float => env_type = Some ( EnvType :: Float ) ,
4239 Rule :: env_var_type_string => env_type = Some ( EnvType :: String ) ,
4340 Rule :: min_max => ( min, max) = parse_min_max_int ( pairs) ?,
4441 Rule :: unit => unit = parse_str ( pairs) ,
4542 Rule :: init_value => initial_value = parse_int ( pairs) ? as f64 ,
4643 Rule :: ev_id => ev_id = parse_int ( pairs) ?,
47- Rule :: node_name => {
48- let node_name = pairs. as_str ( ) . to_string ( ) ;
49- if access_type. is_empty ( ) {
50- // First node_name is the access type
51- access_type = node_name;
52- } else {
53- // Subsequent node_names are access nodes
54- let access_node = if node_name == "VECTOR__XXX" {
55- AccessNode :: VectorXXX
56- } else {
57- AccessNode :: Name ( node_name)
58- } ;
59- access_nodes. push ( access_node) ;
60- }
61- }
62- _ => panic ! ( "Unexpected rule: {:?}" , pairs. as_rule( ) ) ,
44+ Rule :: access_type => access_type = pairs. try_into ( ) ?,
45+ Rule :: node_name => access_nodes. push ( pairs. try_into ( ) ?) ,
46+ _ => panic ! ( "Unexpected rule: {pairs:?}" ) ,
6347 }
6448 }
6549
66- let access_type = match access_type. as_str ( ) {
67- "DUMMY_NODE_VECTOR1" => AccessType :: DummyNodeVector1 ,
68- "DUMMY_NODE_VECTOR2" => AccessType :: DummyNodeVector2 ,
69- "DUMMY_NODE_VECTOR3" => AccessType :: DummyNodeVector3 ,
70- // FIXME: is this correct?
71- _ => AccessType :: DummyNodeVector0 ,
72- } ;
73-
7450 Ok ( Self {
7551 name,
7652 typ : env_type. unwrap ( ) ,
0 commit comments