@@ -10,7 +10,8 @@ impl Processor for SchemaProcessor {
1010 meta : & mut Meta ,
1111 state : & ProcessingState < ' _ > ,
1212 ) -> ValueAction {
13- verify_value_nonempty ( value, meta, & state)
13+ value_trim_whitespace ( value, meta, & state)
14+ . and_then ( || verify_value_nonempty ( value, meta, & state) )
1415 . and_then ( || verify_value_pattern ( value, meta, & state) )
1516 }
1617
@@ -54,6 +55,20 @@ impl Processor for SchemaProcessor {
5455 }
5556}
5657
58+ fn value_trim_whitespace (
59+ value : & mut String ,
60+ _meta : & mut Meta ,
61+ state : & ProcessingState < ' _ > ,
62+ ) -> ValueAction {
63+ if state. attrs ( ) . trim_whitespace {
64+ let new_value = value. trim ( ) . to_owned ( ) ;
65+ value. clear ( ) ;
66+ value. push_str ( & new_value) ;
67+ }
68+
69+ ValueAction :: Keep
70+ }
71+
5772fn verify_value_nonempty < T > (
5873 value : & mut T ,
5974 meta : & mut Meta ,
@@ -133,7 +148,7 @@ mod tests {
133148 }
134149
135150 #[ test]
136- fn test_release_newlines ( ) {
151+ fn test_release_invalid_newlines ( ) {
137152 use crate :: protocol:: Event ;
138153
139154 let mut event = Annotated :: new ( Event {
@@ -265,4 +280,22 @@ mod tests {
265280
266281 assert_eq_dbg ! ( stack, expected) ;
267282 }
283+
284+ #[ test]
285+ fn test_newlines_release ( ) {
286+ use crate :: protocol:: Event ;
287+ let mut event = Annotated :: new ( Event {
288+ release : Annotated :: new ( "42\n " . to_string ( ) . into ( ) ) ,
289+ ..Default :: default ( )
290+ } ) ;
291+
292+ process_value ( & mut event, & mut SchemaProcessor , ProcessingState :: root ( ) ) ;
293+
294+ let expected = Annotated :: new ( Event {
295+ release : Annotated :: new ( "42" . to_string ( ) . into ( ) ) ,
296+ ..Default :: default ( )
297+ } ) ;
298+
299+ assert_eq_dbg ! ( expected, event) ;
300+ }
268301}
0 commit comments