@@ -9,15 +9,30 @@ use picojson::{
9
9
DefaultConfig , Event , JsonNumber , NumberResult , PushParseError , PushParser , PushParserHandler ,
10
10
} ;
11
11
12
+ /// Owned event representation for comparison
13
+ #[ derive( Debug , Clone , PartialEq ) ]
14
+ enum OwnedEvent {
15
+ StartObject ,
16
+ EndObject ,
17
+ StartArray ,
18
+ EndArray ,
19
+ Key ( String ) ,
20
+ String ( String ) ,
21
+ Number ( String ) ,
22
+ Bool ( bool ) ,
23
+ Null ,
24
+ EndDocument ,
25
+ }
26
+
12
27
/// Handler that collects events for verification during stress testing
13
- struct StressTestHandler < ' expected > {
14
- events : Vec < Event < ' static , ' static > > ,
15
- expected_events : & ' expected [ Event < ' static , ' static > ] ,
28
+ struct StressTestHandler {
29
+ events : Vec < OwnedEvent > ,
30
+ expected_events : Vec < OwnedEvent > ,
16
31
current_index : usize ,
17
32
}
18
33
19
- impl < ' expected > StressTestHandler < ' expected > {
20
- fn new ( expected_events : & ' expected [ Event < ' static , ' static > ] ) -> Self {
34
+ impl StressTestHandler {
35
+ fn new ( expected_events : Vec < OwnedEvent > ) -> Self {
21
36
Self {
22
37
events : Vec :: new ( ) ,
23
38
expected_events,
@@ -40,7 +55,7 @@ impl<'expected> StressTestHandler<'expected> {
40
55
. zip ( self . expected_events . iter ( ) )
41
56
. enumerate ( )
42
57
{
43
- if ! events_equal ( actual, expected) {
58
+ if actual != expected {
44
59
return Err ( format ! (
45
60
"Event {} mismatch: expected {:?}, got {:?}" ,
46
61
i, expected, actual
@@ -52,30 +67,22 @@ impl<'expected> StressTestHandler<'expected> {
52
67
}
53
68
}
54
69
55
- impl < ' input , ' scratch , ' expected > PushParserHandler < ' input , ' scratch , String >
56
- for StressTestHandler < ' expected >
70
+ impl < ' input , ' scratch > PushParserHandler < ' input , ' scratch , String >
71
+ for StressTestHandler
57
72
{
58
73
fn handle_event ( & mut self , event : Event < ' input , ' scratch > ) -> Result < ( ) , String > {
59
74
// Convert to owned event for storage
60
75
let owned_event = match event {
61
- Event :: StartObject => Event :: StartObject ,
62
- Event :: EndObject => Event :: EndObject ,
63
- Event :: StartArray => Event :: StartArray ,
64
- Event :: EndArray => Event :: EndArray ,
65
- Event :: Key ( k) => Event :: Key ( picojson:: String :: Borrowed ( k. as_ref ( ) . to_string ( ) . leak ( ) ) ) ,
66
- Event :: String ( s) => {
67
- Event :: String ( picojson:: String :: Borrowed ( s. as_ref ( ) . to_string ( ) . leak ( ) ) )
68
- }
69
- Event :: Number ( n) => Event :: Number ( JsonNumber :: Borrowed {
70
- raw : n. as_str ( ) . to_string ( ) . leak ( ) ,
71
- parsed : n
72
- . as_int ( )
73
- . map ( NumberResult :: Integer )
74
- . unwrap_or ( NumberResult :: IntegerOverflow ) ,
75
- } ) ,
76
- Event :: Bool ( b) => Event :: Bool ( b) ,
77
- Event :: Null => Event :: Null ,
78
- Event :: EndDocument => Event :: EndDocument ,
76
+ Event :: StartObject => OwnedEvent :: StartObject ,
77
+ Event :: EndObject => OwnedEvent :: EndObject ,
78
+ Event :: StartArray => OwnedEvent :: StartArray ,
79
+ Event :: EndArray => OwnedEvent :: EndArray ,
80
+ Event :: Key ( k) => OwnedEvent :: Key ( k. as_ref ( ) . to_string ( ) ) ,
81
+ Event :: String ( s) => OwnedEvent :: String ( s. as_ref ( ) . to_string ( ) ) ,
82
+ Event :: Number ( n) => OwnedEvent :: Number ( n. as_str ( ) . to_string ( ) ) ,
83
+ Event :: Bool ( b) => OwnedEvent :: Bool ( b) ,
84
+ Event :: Null => OwnedEvent :: Null ,
85
+ Event :: EndDocument => OwnedEvent :: EndDocument ,
79
86
} ;
80
87
81
88
self . events . push ( owned_event) ;
@@ -84,20 +91,21 @@ impl<'input, 'scratch, 'expected> PushParserHandler<'input, 'scratch, String>
84
91
}
85
92
}
86
93
87
- /// Compare events for equality, handling lifetime differences
88
- fn events_equal ( a : & Event , b : & Event ) -> bool {
89
- match ( a, b) {
90
- ( Event :: StartObject , Event :: StartObject ) => true ,
91
- ( Event :: EndObject , Event :: EndObject ) => true ,
92
- ( Event :: StartArray , Event :: StartArray ) => true ,
93
- ( Event :: EndArray , Event :: EndArray ) => true ,
94
- ( Event :: Key ( k1) , Event :: Key ( k2) ) => k1. as_ref ( ) == k2. as_ref ( ) ,
95
- ( Event :: String ( s1) , Event :: String ( s2) ) => s1. as_ref ( ) == s2. as_ref ( ) ,
96
- ( Event :: Number ( n1) , Event :: Number ( n2) ) => n1. as_str ( ) == n2. as_str ( ) ,
97
- ( Event :: Bool ( b1) , Event :: Bool ( b2) ) => b1 == b2,
98
- ( Event :: Null , Event :: Null ) => true ,
99
- ( Event :: EndDocument , Event :: EndDocument ) => true ,
100
- _ => false ,
94
+ impl OwnedEvent {
95
+ /// Convert from Event to OwnedEvent
96
+ fn from_event ( event : & Event ) -> Self {
97
+ match event {
98
+ Event :: StartObject => OwnedEvent :: StartObject ,
99
+ Event :: EndObject => OwnedEvent :: EndObject ,
100
+ Event :: StartArray => OwnedEvent :: StartArray ,
101
+ Event :: EndArray => OwnedEvent :: EndArray ,
102
+ Event :: Key ( k) => OwnedEvent :: Key ( k. as_ref ( ) . to_string ( ) ) ,
103
+ Event :: String ( s) => OwnedEvent :: String ( s. as_ref ( ) . to_string ( ) ) ,
104
+ Event :: Number ( n) => OwnedEvent :: Number ( n. as_str ( ) . to_string ( ) ) ,
105
+ Event :: Bool ( b) => OwnedEvent :: Bool ( * b) ,
106
+ Event :: Null => OwnedEvent :: Null ,
107
+ Event :: EndDocument => OwnedEvent :: EndDocument ,
108
+ }
101
109
}
102
110
}
103
111
@@ -299,7 +307,7 @@ fn test_push_parsing_with_config(
299
307
chunk_pattern : & [ usize ] ,
300
308
) -> Result < ( ) , String > {
301
309
let mut buffer = vec ! [ 0u8 ; buffer_size] ;
302
- let handler = StressTestHandler :: new ( & scenario. expected_events ) ;
310
+ let handler = StressTestHandler :: new ( scenario. expected_events . iter ( ) . map ( OwnedEvent :: from_event ) . collect ( ) ) ;
303
311
let mut parser = PushParser :: < _ , DefaultConfig > :: new ( handler, & mut buffer) ;
304
312
305
313
let mut writer = ChunkedWriter :: new ( scenario. json , chunk_pattern) ;
@@ -539,7 +547,7 @@ fn test_push_parser_stress_document_validation() {
539
547
540
548
for & pattern in chunk_patterns {
541
549
let mut buffer = vec ! [ 0u8 ; buffer_size] ;
542
- let handler = StressTestHandler :: new ( & [ ] ) ;
550
+ let handler = StressTestHandler :: new ( vec ! [ ] ) ;
543
551
let mut parser = PushParser :: < _ , DefaultConfig > :: new ( handler, & mut buffer) ;
544
552
let mut writer = ChunkedWriter :: new ( json, pattern) ;
545
553
0 commit comments