@@ -53,12 +53,12 @@ impl<'a> RedisJsonFormatter<'a> {
53
53
W : io:: Write ,
54
54
{
55
55
// Write new line if defined
56
- if let Some ( n) = self . newline . as_ref ( ) {
56
+ if let Some ( n) = self . newline {
57
57
wr. write_all ( n. as_bytes ( ) ) ?;
58
58
}
59
59
60
60
// Ident the next line if defined
61
- if let Some ( s) = self . indent . as_ref ( ) {
61
+ if let Some ( s) = self . indent {
62
62
let bytes = s. as_bytes ( ) ;
63
63
for _ in 0 ..self . current_indent {
64
64
wr. write_all ( bytes) ?;
@@ -147,7 +147,7 @@ impl Formatter for RedisJsonFormatter<'_> {
147
147
W : io:: Write ,
148
148
{
149
149
writer. write_all ( b":" ) ?;
150
- if let Some ( s) = self . space . as_ref ( ) {
150
+ if let Some ( s) = self . space {
151
151
writer. write_all ( s. as_bytes ( ) )
152
152
} else {
153
153
Ok ( ( ) )
@@ -162,3 +162,236 @@ impl Formatter for RedisJsonFormatter<'_> {
162
162
Ok ( ( ) )
163
163
}
164
164
}
165
+
166
+ #[ cfg( test) ]
167
+ mod tests {
168
+ use super :: * ;
169
+
170
+ #[ test]
171
+ fn test_default_formatter ( ) {
172
+ let mut formatter = RedisJsonFormatter :: new ( None , None , None ) ;
173
+ let mut writer = vec ! [ ] ;
174
+
175
+ assert ! ( matches!( formatter. begin_array( & mut writer) , Ok ( ( ) ) ) ) ;
176
+ assert_eq ! ( & writer[ 0 ..] , b"[" ) ;
177
+
178
+ assert ! ( matches!(
179
+ formatter. begin_array_value( & mut writer, true ) ,
180
+ Ok ( ( ) )
181
+ ) ) ;
182
+ assert_eq ! ( & writer[ 0 ..] , b"[" ) ;
183
+
184
+ assert ! ( matches!( formatter. begin_object( & mut writer) , Ok ( ( ) ) ) ) ;
185
+ assert_eq ! ( & writer[ 0 ..] , b"[{" ) ;
186
+
187
+ assert ! ( matches!(
188
+ formatter. begin_object_key( & mut writer, true ) ,
189
+ Ok ( ( ) )
190
+ ) ) ;
191
+ assert_eq ! ( & writer[ 0 ..] , b"[{" ) ;
192
+
193
+ assert ! ( matches!(
194
+ formatter. begin_object_key( & mut writer, false ) ,
195
+ Ok ( ( ) )
196
+ ) ) ;
197
+ assert_eq ! ( & writer[ 0 ..] , b"[{," ) ;
198
+
199
+ assert ! ( matches!( formatter. begin_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
200
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:" ) ;
201
+
202
+ assert ! ( matches!( formatter. end_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
203
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:" ) ;
204
+
205
+ assert ! ( matches!( formatter. end_object( & mut writer) , Ok ( ( ) ) ) ) ;
206
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:}" ) ;
207
+
208
+ assert ! ( matches!(
209
+ formatter. begin_array_value( & mut writer, true ) ,
210
+ Ok ( ( ) )
211
+ ) ) ;
212
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:}" ) ;
213
+
214
+ assert ! ( matches!( formatter. end_array_value( & mut writer) , Ok ( ( ) ) ) ) ;
215
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:}" ) ;
216
+
217
+ assert ! ( matches!(
218
+ formatter. begin_array_value( & mut writer, false ) ,
219
+ Ok ( ( ) )
220
+ ) ) ;
221
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:}," ) ;
222
+
223
+ assert ! ( matches!( formatter. end_array( & mut writer) , Ok ( ( ) ) ) ) ;
224
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:},]" ) ;
225
+ }
226
+
227
+ #[ test]
228
+ fn test_ident_formatter ( ) {
229
+ let mut formatter = RedisJsonFormatter :: new ( Some ( "_" ) , None , None ) ;
230
+ let mut writer = vec ! [ ] ;
231
+
232
+ assert ! ( matches!( formatter. begin_array( & mut writer) , Ok ( ( ) ) ) ) ;
233
+ assert_eq ! ( & writer[ 0 ..] , b"[" ) ;
234
+
235
+ assert ! ( matches!(
236
+ formatter. begin_array_value( & mut writer, true ) ,
237
+ Ok ( ( ) )
238
+ ) ) ;
239
+ assert_eq ! ( & writer[ 0 ..] , b"[_" ) ;
240
+
241
+ assert ! ( matches!( formatter. begin_object( & mut writer) , Ok ( ( ) ) ) ) ;
242
+ assert_eq ! ( & writer[ 0 ..] , b"[_{" ) ;
243
+
244
+ assert ! ( matches!(
245
+ formatter. begin_object_key( & mut writer, true ) ,
246
+ Ok ( ( ) )
247
+ ) ) ;
248
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__" ) ;
249
+
250
+ assert ! ( matches!(
251
+ formatter. begin_object_key( & mut writer, false ) ,
252
+ Ok ( ( ) )
253
+ ) ) ;
254
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__" ) ;
255
+
256
+ assert ! ( matches!( formatter. begin_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
257
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:" ) ;
258
+
259
+ assert ! ( matches!( formatter. end_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
260
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:" ) ;
261
+
262
+ assert ! ( matches!( formatter. end_object( & mut writer) , Ok ( ( ) ) ) ) ;
263
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:_}" ) ;
264
+
265
+ assert ! ( matches!(
266
+ formatter. begin_array_value( & mut writer, true ) ,
267
+ Ok ( ( ) )
268
+ ) ) ;
269
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:_}_" ) ;
270
+
271
+ assert ! ( matches!( formatter. end_array_value( & mut writer) , Ok ( ( ) ) ) ) ;
272
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:_}_" ) ;
273
+
274
+ assert ! ( matches!(
275
+ formatter. begin_array_value( & mut writer, false ) ,
276
+ Ok ( ( ) )
277
+ ) ) ;
278
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:_}_,_" ) ;
279
+
280
+ assert ! ( matches!( formatter. end_array( & mut writer) , Ok ( ( ) ) ) ) ;
281
+ assert_eq ! ( & writer[ 0 ..] , b"[_{__,__:_}_,_]" ) ;
282
+ }
283
+
284
+ #[ test]
285
+ fn test_space_formatter ( ) {
286
+ let mut formatter = RedisJsonFormatter :: new ( None , Some ( "s" ) , None ) ;
287
+ let mut writer = vec ! [ ] ;
288
+
289
+ assert ! ( matches!( formatter. begin_array( & mut writer) , Ok ( ( ) ) ) ) ;
290
+ assert_eq ! ( & writer[ 0 ..] , b"[" ) ;
291
+
292
+ assert ! ( matches!(
293
+ formatter. begin_array_value( & mut writer, true ) ,
294
+ Ok ( ( ) )
295
+ ) ) ;
296
+ assert_eq ! ( & writer[ 0 ..] , b"[" ) ;
297
+
298
+ assert ! ( matches!( formatter. begin_object( & mut writer) , Ok ( ( ) ) ) ) ;
299
+ assert_eq ! ( & writer[ 0 ..] , b"[{" ) ;
300
+
301
+ assert ! ( matches!(
302
+ formatter. begin_object_key( & mut writer, true ) ,
303
+ Ok ( ( ) )
304
+ ) ) ;
305
+ assert_eq ! ( & writer[ 0 ..] , b"[{" ) ;
306
+
307
+ assert ! ( matches!(
308
+ formatter. begin_object_key( & mut writer, false ) ,
309
+ Ok ( ( ) )
310
+ ) ) ;
311
+ assert_eq ! ( & writer[ 0 ..] , b"[{," ) ;
312
+
313
+ assert ! ( matches!( formatter. begin_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
314
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s" ) ;
315
+
316
+ assert ! ( matches!( formatter. end_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
317
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s" ) ;
318
+
319
+ assert ! ( matches!( formatter. end_object( & mut writer) , Ok ( ( ) ) ) ) ;
320
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s}" ) ;
321
+
322
+ assert ! ( matches!(
323
+ formatter. begin_array_value( & mut writer, true ) ,
324
+ Ok ( ( ) )
325
+ ) ) ;
326
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s}" ) ;
327
+
328
+ assert ! ( matches!( formatter. end_array_value( & mut writer) , Ok ( ( ) ) ) ) ;
329
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s}" ) ;
330
+
331
+ assert ! ( matches!(
332
+ formatter. begin_array_value( & mut writer, false ) ,
333
+ Ok ( ( ) )
334
+ ) ) ;
335
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s}," ) ;
336
+
337
+ assert ! ( matches!( formatter. end_array( & mut writer) , Ok ( ( ) ) ) ) ;
338
+ assert_eq ! ( & writer[ 0 ..] , b"[{,:s},]" ) ;
339
+ }
340
+
341
+ #[ test]
342
+ fn test_new_line_formatter ( ) {
343
+ let mut formatter = RedisJsonFormatter :: new ( None , None , Some ( "n" ) ) ;
344
+ let mut writer = vec ! [ ] ;
345
+
346
+ assert ! ( matches!( formatter. begin_array( & mut writer) , Ok ( ( ) ) ) ) ;
347
+ assert_eq ! ( & writer[ 0 ..] , b"[" ) ;
348
+
349
+ assert ! ( matches!(
350
+ formatter. begin_array_value( & mut writer, true ) ,
351
+ Ok ( ( ) )
352
+ ) ) ;
353
+ assert_eq ! ( & writer[ 0 ..] , b"[n" ) ;
354
+
355
+ assert ! ( matches!( formatter. begin_object( & mut writer) , Ok ( ( ) ) ) ) ;
356
+ assert_eq ! ( & writer[ 0 ..] , b"[n{" ) ;
357
+
358
+ assert ! ( matches!(
359
+ formatter. begin_object_key( & mut writer, true ) ,
360
+ Ok ( ( ) )
361
+ ) ) ;
362
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n" ) ;
363
+
364
+ assert ! ( matches!(
365
+ formatter. begin_object_key( & mut writer, false ) ,
366
+ Ok ( ( ) )
367
+ ) ) ;
368
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n" ) ;
369
+
370
+ assert ! ( matches!( formatter. begin_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
371
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:" ) ;
372
+
373
+ assert ! ( matches!( formatter. end_object_value( & mut writer) , Ok ( ( ) ) ) ) ;
374
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:" ) ;
375
+
376
+ assert ! ( matches!( formatter. end_object( & mut writer) , Ok ( ( ) ) ) ) ;
377
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:n}" ) ;
378
+
379
+ assert ! ( matches!(
380
+ formatter. begin_array_value( & mut writer, true ) ,
381
+ Ok ( ( ) )
382
+ ) ) ;
383
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:n}n" ) ;
384
+
385
+ assert ! ( matches!( formatter. end_array_value( & mut writer) , Ok ( ( ) ) ) ) ;
386
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:n}n" ) ;
387
+
388
+ assert ! ( matches!(
389
+ formatter. begin_array_value( & mut writer, false ) ,
390
+ Ok ( ( ) )
391
+ ) ) ;
392
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:n}n,n" ) ;
393
+
394
+ assert ! ( matches!( formatter. end_array( & mut writer) , Ok ( ( ) ) ) ) ;
395
+ assert_eq ! ( & writer[ 0 ..] , b"[n{n,n:n}n,nn]" ) ;
396
+ }
397
+ }
0 commit comments