@@ -4,21 +4,25 @@ use crate::{
44} ;
55
66const GLOBAL_MODIFIER : & str = "+global" ;
7+ const RAW_MODIFIER : & str = "+raw" ;
78
89pub fn parse_key ( value : & str ) -> DevrcResult < VariableKey > {
9- let mut parts = value. splitn ( 2 , |c| c == ' ' || c == '\t' ) ;
10+ let mut parts = value. split ( |c| c == ' ' || c == '\t' ) ;
1011
1112 let name = parts. next ( ) . ok_or ( DevrcError :: InvalidVariableName ) ?;
1213
1314 let mut key = VariableKey {
1415 original : value. to_string ( ) ,
1516 name : name. to_string ( ) ,
1617 set_global : false ,
18+ raw : false ,
1719 } ;
1820
19- if let Some ( value ) = parts. next ( ) {
20- if value == GLOBAL_MODIFIER {
21+ for part in parts {
22+ if part == GLOBAL_MODIFIER {
2123 key. set_global = true ;
24+ } else if part == RAW_MODIFIER {
25+ key. raw = true ;
2226 } else {
2327 return Err ( DevrcError :: InvalidVariableModifier ) ;
2428 }
@@ -34,12 +38,13 @@ mod tests {
3438
3539 #[ test]
3640 fn test_parse_variables_key_with_global ( ) {
37- let result = parse_key ( "name +global" ) . unwrap ( ) ;
41+ let result = parse_key ( "name +global +raw " ) . unwrap ( ) ;
3842
3943 let control = VariableKey {
40- original : "name +global" . to_string ( ) ,
44+ original : "name +global +raw " . to_string ( ) ,
4145 name : "name" . to_string ( ) ,
4246 set_global : true ,
47+ raw : true ,
4348 } ;
4449 assert_eq ! ( result, control) ;
4550 }
@@ -52,13 +57,14 @@ mod tests {
5257 original : "name" . to_string ( ) ,
5358 name : "name" . to_string ( ) ,
5459 set_global : false ,
60+ raw : false ,
5561 } ;
5662 assert_eq ! ( result, control) ;
5763 }
5864
5965 #[ test]
6066 fn test_invalid_key ( ) {
61- let result = parse_key ( "name +invalid" ) ;
67+ let result = parse_key ( "name +invalid +global +raw " ) ;
6268
6369 match result {
6470 Err ( DevrcError :: InvalidVariableModifier ) => { }
0 commit comments