@@ -321,55 +321,55 @@ impl Data {
321
321
///
322
322
/// This is generally used on `actual` data to make it match `expected`
323
323
pub fn coerce_to ( self , format : DataFormat ) -> Self {
324
- let mut data = match ( self . inner , format) {
325
- ( DataInner :: Error ( inner) , _) => inner. into ( ) ,
326
- ( inner, DataFormat :: Error ) => inner. into ( ) ,
327
- ( DataInner :: Binary ( inner) , DataFormat :: Binary ) => Self :: binary ( inner) ,
328
- ( DataInner :: Text ( inner) , DataFormat :: Text ) => Self :: text ( inner) ,
324
+ let source = self . source ;
325
+ let inner = match ( self . inner , format) {
326
+ ( DataInner :: Error ( inner) , _) => DataInner :: Error ( inner) ,
327
+ ( inner, DataFormat :: Error ) => inner,
328
+ ( DataInner :: Binary ( inner) , DataFormat :: Binary ) => DataInner :: Binary ( inner) ,
329
+ ( DataInner :: Text ( inner) , DataFormat :: Text ) => DataInner :: Text ( inner) ,
329
330
#[ cfg( feature = "json" ) ]
330
- ( DataInner :: Json ( inner) , DataFormat :: Json ) => Self :: json ( inner) ,
331
+ ( DataInner :: Json ( inner) , DataFormat :: Json ) => DataInner :: Json ( inner) ,
331
332
#[ cfg( feature = "json" ) ]
332
- ( DataInner :: JsonLines ( inner) , DataFormat :: JsonLines ) => {
333
- DataInner :: JsonLines ( inner) . into ( )
334
- }
333
+ ( DataInner :: JsonLines ( inner) , DataFormat :: JsonLines ) => DataInner :: JsonLines ( inner) ,
335
334
#[ cfg( feature = "term-svg" ) ]
336
- ( DataInner :: TermSvg ( inner) , DataFormat :: TermSvg ) => inner . into ( ) ,
335
+ ( DataInner :: TermSvg ( inner) , DataFormat :: TermSvg ) => DataInner :: TermSvg ( inner ) ,
337
336
( DataInner :: Binary ( inner) , _) => {
338
337
if is_binary ( & inner) {
339
- Self :: binary ( inner)
338
+ DataInner :: Binary ( inner)
340
339
} else {
341
340
match String :: from_utf8 ( inner) {
342
341
Ok ( str) => {
343
342
let coerced = Self :: text ( str) . coerce_to ( format) ;
344
343
// if the Text cannot be coerced into the correct format
345
344
// reset it back to Binary
346
- if coerced. format ( ) != format {
345
+ let coerced = if coerced. format ( ) != format {
347
346
coerced. coerce_to ( DataFormat :: Binary )
348
347
} else {
349
348
coerced
350
- }
349
+ } ;
350
+ coerced. inner
351
351
}
352
352
Err ( err) => {
353
353
let bin = err. into_bytes ( ) ;
354
- Self :: binary ( bin)
354
+ DataInner :: Binary ( bin)
355
355
}
356
356
}
357
357
}
358
358
}
359
359
#[ cfg( feature = "json" ) ]
360
360
( DataInner :: Text ( inner) , DataFormat :: Json ) => {
361
361
if let Ok ( json) = serde_json:: from_str :: < serde_json:: Value > ( & inner) {
362
- Self :: json ( json)
362
+ DataInner :: Json ( json)
363
363
} else {
364
- Self :: text ( inner)
364
+ DataInner :: Text ( inner)
365
365
}
366
366
}
367
367
#[ cfg( feature = "json" ) ]
368
368
( DataInner :: Text ( inner) , DataFormat :: JsonLines ) => {
369
369
if let Ok ( jsonlines) = parse_jsonlines ( & inner) {
370
- Self :: jsonlines ( jsonlines)
370
+ DataInner :: JsonLines ( serde_json :: Value :: Array ( jsonlines) )
371
371
} else {
372
- Self :: text ( inner)
372
+ DataInner :: Text ( inner)
373
373
}
374
374
}
375
375
#[ cfg( feature = "term-svg" ) ]
@@ -378,33 +378,32 @@ impl Data {
378
378
}
379
379
( inner, DataFormat :: Binary ) => {
380
380
let remake: Self = inner. into ( ) ;
381
- Self :: binary ( remake. to_bytes ( ) . expect ( "error case handled" ) )
381
+ DataInner :: Binary ( remake. to_bytes ( ) . expect ( "error case handled" ) )
382
382
}
383
383
// This variant is already covered unless structured data is enabled
384
384
#[ cfg( feature = "structured-data" ) ]
385
385
( inner, DataFormat :: Text ) => {
386
386
let remake: Self = inner. into ( ) ;
387
387
if let Some ( str) = remake. render ( ) {
388
- Self :: text ( str)
388
+ DataInner :: Text ( str)
389
389
} else {
390
- remake
390
+ remake. inner
391
391
}
392
392
}
393
393
// reachable if more than one structured data format is enabled
394
394
#[ allow( unreachable_patterns) ]
395
395
#[ cfg( feature = "json" ) ]
396
- ( inner, DataFormat :: Json ) => inner. into ( ) ,
396
+ ( inner, DataFormat :: Json ) => inner,
397
397
// reachable if more than one structured data format is enabled
398
398
#[ allow( unreachable_patterns) ]
399
399
#[ cfg( feature = "json" ) ]
400
- ( inner, DataFormat :: JsonLines ) => inner. into ( ) ,
400
+ ( inner, DataFormat :: JsonLines ) => inner,
401
401
// reachable if more than one structured data format is enabled
402
402
#[ allow( unreachable_patterns) ]
403
403
#[ cfg( feature = "term-svg" ) ]
404
- ( inner, DataFormat :: TermSvg ) => inner. into ( ) ,
404
+ ( inner, DataFormat :: TermSvg ) => inner,
405
405
} ;
406
- data. source = self . source ;
407
- data
406
+ Self { inner, source }
408
407
}
409
408
410
409
/// Outputs the current `DataFormat` of the underlying data
0 commit comments