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:: {
5+ parse_int, parse_min_max_int, parse_str, single_string, DbcResult ,
6+ } ;
57
68#[ derive( Clone , Debug , PartialEq ) ]
79#[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
@@ -28,49 +30,25 @@ impl EnvironmentVariable {
2830 let mut unit = String :: new ( ) ;
2931 let mut initial_value = 0.0f64 ;
3032 let mut ev_id = 0i64 ;
31- let mut access_type = String :: new ( ) ;
33+ let mut access_type = AccessType :: DummyNodeVector0 ;
3234 let mut access_nodes = Vec :: new ( ) ;
3335
3436 for pairs in pair. into_inner ( ) {
3537 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- }
38+ Rule :: env_var => name = single_string ( pairs, Rule :: env_var_name) ?,
4039 Rule :: env_var_type_int => env_type = Some ( EnvType :: Integer ) ,
4140 Rule :: env_var_type_float => env_type = Some ( EnvType :: Float ) ,
4241 Rule :: env_var_type_string => env_type = Some ( EnvType :: String ) ,
4342 Rule :: min_max => ( min, max) = parse_min_max_int ( pairs) ?,
4443 Rule :: unit => unit = parse_str ( pairs) ,
4544 Rule :: init_value => initial_value = parse_int ( pairs) ? as f64 ,
4645 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( ) ) ,
46+ Rule :: access_type => access_type = pairs. try_into ( ) ?,
47+ Rule :: node_name => access_nodes. push ( pairs. try_into ( ) ?) ,
48+ _ => panic ! ( "Unexpected rule: {pairs:?}" ) ,
6349 }
6450 }
6551
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-
7452 Ok ( Self {
7553 name,
7654 typ : env_type. unwrap ( ) ,
0 commit comments