@@ -402,319 +402,6 @@ mod std_support {
402
402
}
403
403
}
404
404
405
- /// The result of calling `Source::as_map`.
406
- pub struct AsMap < S > ( S ) ;
407
-
408
- /// Visit this source as a map.
409
- pub fn as_map < S > ( source : S ) -> AsMap < S >
410
- where
411
- S : Source ,
412
- {
413
- AsMap ( source)
414
- }
415
-
416
- impl < S > Source for AsMap < S >
417
- where
418
- S : Source ,
419
- {
420
- fn visit < ' kvs > ( & ' kvs self , visitor : & mut dyn Visitor < ' kvs > ) -> Result < ( ) , Error > {
421
- self . 0 . visit ( visitor)
422
- }
423
-
424
- fn get ( & self , key : Key ) -> Option < Value < ' _ > > {
425
- self . 0 . get ( key)
426
- }
427
-
428
- fn count ( & self ) -> usize {
429
- self . 0 . count ( )
430
- }
431
- }
432
-
433
- impl < S > fmt:: Debug for AsMap < S >
434
- where
435
- S : Source ,
436
- {
437
- fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
438
- let mut f = f. debug_map ( ) ;
439
- self . 0 . visit ( & mut f) . map_err ( |_| fmt:: Error ) ?;
440
- f. finish ( )
441
- }
442
- }
443
-
444
- /// The result of calling `Source::as_list`
445
- pub struct AsList < S > ( S ) ;
446
-
447
- /// Visit this source as a list.
448
- pub fn as_list < S > ( source : S ) -> AsList < S >
449
- where
450
- S : Source ,
451
- {
452
- AsList ( source)
453
- }
454
-
455
- impl < S > Source for AsList < S >
456
- where
457
- S : Source ,
458
- {
459
- fn visit < ' kvs > ( & ' kvs self , visitor : & mut dyn Visitor < ' kvs > ) -> Result < ( ) , Error > {
460
- self . 0 . visit ( visitor)
461
- }
462
-
463
- fn get ( & self , key : Key ) -> Option < Value < ' _ > > {
464
- self . 0 . get ( key)
465
- }
466
-
467
- fn count ( & self ) -> usize {
468
- self . 0 . count ( )
469
- }
470
- }
471
-
472
- impl < S > fmt:: Debug for AsList < S >
473
- where
474
- S : Source ,
475
- {
476
- fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
477
- let mut f = f. debug_list ( ) ;
478
- self . 0 . visit ( & mut f) . map_err ( |_| fmt:: Error ) ?;
479
- f. finish ( )
480
- }
481
- }
482
-
483
- #[ cfg( feature = "kv_unstable_sval" ) ]
484
- mod sval_support {
485
- use super :: * ;
486
-
487
- impl < S > sval:: Value for AsMap < S >
488
- where
489
- S : Source ,
490
- {
491
- fn stream < ' sval , SV : sval:: Stream < ' sval > + ?Sized > (
492
- & ' sval self ,
493
- stream : & mut SV ,
494
- ) -> sval:: Result {
495
- struct StreamVisitor < ' a , V : ?Sized > ( & ' a mut V ) ;
496
-
497
- impl < ' a , ' kvs , V : sval:: Stream < ' kvs > + ?Sized > Visitor < ' kvs > for StreamVisitor < ' a , V > {
498
- fn visit_pair ( & mut self , key : Key < ' kvs > , value : Value < ' kvs > ) -> Result < ( ) , Error > {
499
- self . 0
500
- . map_key_begin ( )
501
- . map_err ( |_| Error :: msg ( "failed to stream map key" ) ) ?;
502
- sval_ref:: stream_ref ( self . 0 , key)
503
- . map_err ( |_| Error :: msg ( "failed to stream map key" ) ) ?;
504
- self . 0
505
- . map_key_end ( )
506
- . map_err ( |_| Error :: msg ( "failed to stream map key" ) ) ?;
507
-
508
- self . 0
509
- . map_value_begin ( )
510
- . map_err ( |_| Error :: msg ( "failed to stream map value" ) ) ?;
511
- sval_ref:: stream_ref ( self . 0 , value)
512
- . map_err ( |_| Error :: msg ( "failed to stream map value" ) ) ?;
513
- self . 0
514
- . map_value_end ( )
515
- . map_err ( |_| Error :: msg ( "failed to stream map value" ) ) ?;
516
-
517
- Ok ( ( ) )
518
- }
519
- }
520
-
521
- stream
522
- . map_begin ( Some ( self . count ( ) ) )
523
- . map_err ( |_| sval:: Error :: new ( ) ) ?;
524
-
525
- self . visit ( & mut StreamVisitor ( stream) )
526
- . map_err ( |_| sval:: Error :: new ( ) ) ?;
527
-
528
- stream. map_end ( ) . map_err ( |_| sval:: Error :: new ( ) )
529
- }
530
- }
531
-
532
- impl < S > sval:: Value for AsList < S >
533
- where
534
- S : Source ,
535
- {
536
- fn stream < ' sval , SV : sval:: Stream < ' sval > + ?Sized > (
537
- & ' sval self ,
538
- stream : & mut SV ,
539
- ) -> sval:: Result {
540
- struct StreamVisitor < ' a , V : ?Sized > ( & ' a mut V ) ;
541
-
542
- impl < ' a , ' kvs , V : sval:: Stream < ' kvs > + ?Sized > Visitor < ' kvs > for StreamVisitor < ' a , V > {
543
- fn visit_pair ( & mut self , key : Key < ' kvs > , value : Value < ' kvs > ) -> Result < ( ) , Error > {
544
- self . 0
545
- . seq_value_begin ( )
546
- . map_err ( |_| Error :: msg ( "failed to stream seq value" ) ) ?;
547
- sval_ref:: stream_ref ( self . 0 , ( key, value) )
548
- . map_err ( |_| Error :: msg ( "failed to stream seq value" ) ) ?;
549
- self . 0
550
- . seq_value_end ( )
551
- . map_err ( |_| Error :: msg ( "failed to stream seq value" ) ) ?;
552
-
553
- Ok ( ( ) )
554
- }
555
- }
556
-
557
- stream
558
- . seq_begin ( Some ( self . count ( ) ) )
559
- . map_err ( |_| sval:: Error :: new ( ) ) ?;
560
-
561
- self . visit ( & mut StreamVisitor ( stream) )
562
- . map_err ( |_| sval:: Error :: new ( ) ) ?;
563
-
564
- stream. seq_end ( ) . map_err ( |_| sval:: Error :: new ( ) )
565
- }
566
- }
567
-
568
- #[ cfg( test) ]
569
- mod tests {
570
- use super :: * ;
571
- use sval_derive:: Value ;
572
-
573
- #[ test]
574
- fn derive_stream ( ) {
575
- #[ derive( Value ) ]
576
- pub struct MyRecordAsMap < ' a > {
577
- msg : & ' a str ,
578
- kvs : AsMap < & ' a dyn Source > ,
579
- }
580
-
581
- #[ derive( Value ) ]
582
- pub struct MyRecordAsList < ' a > {
583
- msg : & ' a str ,
584
- kvs : AsList < & ' a dyn Source > ,
585
- }
586
- }
587
- }
588
- }
589
-
590
- #[ cfg( feature = "kv_unstable_serde" ) ]
591
- pub mod as_map {
592
- //! `serde` adapters for serializing a `Source` as a map.
593
-
594
- use super :: * ;
595
- use serde:: { Serialize , Serializer } ;
596
-
597
- /// Serialize a `Source` as a map.
598
- pub fn serialize < T , S > ( source : & T , serializer : S ) -> Result < S :: Ok , S :: Error >
599
- where
600
- T : Source ,
601
- S : Serializer ,
602
- {
603
- as_map ( source) . serialize ( serializer)
604
- }
605
- }
606
-
607
- #[ cfg( feature = "kv_unstable_serde" ) ]
608
- pub mod as_list {
609
- //! `serde` adapters for serializing a `Source` as a list.
610
-
611
- use super :: * ;
612
- use serde:: { Serialize , Serializer } ;
613
-
614
- /// Serialize a `Source` as a list.
615
- pub fn serialize < T , S > ( source : & T , serializer : S ) -> Result < S :: Ok , S :: Error >
616
- where
617
- T : Source ,
618
- S : Serializer ,
619
- {
620
- as_list ( source) . serialize ( serializer)
621
- }
622
- }
623
-
624
- #[ cfg( feature = "kv_unstable_serde" ) ]
625
- mod serde_support {
626
- use super :: * ;
627
- use serde:: ser:: { Error as SerError , Serialize , SerializeMap , SerializeSeq , Serializer } ;
628
-
629
- impl < T > Serialize for AsMap < T >
630
- where
631
- T : Source ,
632
- {
633
- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
634
- where
635
- S : Serializer ,
636
- {
637
- struct SerializerVisitor < ' a , S > ( & ' a mut S ) ;
638
-
639
- impl < ' a , ' kvs , S > Visitor < ' kvs > for SerializerVisitor < ' a , S >
640
- where
641
- S : SerializeMap ,
642
- {
643
- fn visit_pair ( & mut self , key : Key < ' kvs > , value : Value < ' kvs > ) -> Result < ( ) , Error > {
644
- self . 0
645
- . serialize_entry ( & key, & value)
646
- . map_err ( |_| Error :: msg ( "failed to serialize map entry" ) ) ?;
647
- Ok ( ( ) )
648
- }
649
- }
650
-
651
- let mut map = serializer. serialize_map ( Some ( self . count ( ) ) ) ?;
652
-
653
- self . visit ( & mut SerializerVisitor ( & mut map) )
654
- . map_err ( |_| S :: Error :: custom ( "failed to visit key-values" ) ) ?;
655
-
656
- map. end ( )
657
- }
658
- }
659
-
660
- impl < T > Serialize for AsList < T >
661
- where
662
- T : Source ,
663
- {
664
- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
665
- where
666
- S : Serializer ,
667
- {
668
- struct SerializerVisitor < ' a , S > ( & ' a mut S ) ;
669
-
670
- impl < ' a , ' kvs , S > Visitor < ' kvs > for SerializerVisitor < ' a , S >
671
- where
672
- S : SerializeSeq ,
673
- {
674
- fn visit_pair ( & mut self , key : Key < ' kvs > , value : Value < ' kvs > ) -> Result < ( ) , Error > {
675
- self . 0
676
- . serialize_element ( & ( key, value) )
677
- . map_err ( |_| Error :: msg ( "failed to serialize seq entry" ) ) ?;
678
- Ok ( ( ) )
679
- }
680
- }
681
-
682
- let mut seq = serializer. serialize_seq ( Some ( self . count ( ) ) ) ?;
683
-
684
- self . visit ( & mut SerializerVisitor ( & mut seq) )
685
- . map_err ( |_| S :: Error :: custom ( "failed to visit seq" ) ) ?;
686
-
687
- seq. end ( )
688
- }
689
- }
690
-
691
- #[ cfg( test) ]
692
- mod tests {
693
- use super :: * ;
694
- use crate :: kv:: source;
695
- use serde:: Serialize ;
696
-
697
- #[ test]
698
- fn derive_serialize ( ) {
699
- #[ derive( Serialize ) ]
700
- pub struct MyRecordAsMap < ' a > {
701
- msg : & ' a str ,
702
- #[ serde( flatten) ]
703
- #[ serde( with = "source::as_map" ) ]
704
- kvs : & ' a dyn Source ,
705
- }
706
-
707
- #[ derive( Serialize ) ]
708
- pub struct MyRecordAsList < ' a > {
709
- msg : & ' a str ,
710
- #[ serde( flatten) ]
711
- #[ serde( with = "source::as_list" ) ]
712
- kvs : & ' a dyn Source ,
713
- }
714
- }
715
- }
716
- }
717
-
718
405
#[ cfg( test) ]
719
406
mod tests {
720
407
use crate :: kv:: value:: tests:: Token ;
@@ -766,16 +453,4 @@ mod tests {
766
453
let source = None :: < ( & str , i32 ) > ;
767
454
assert ! ( Source :: get( & source, Key :: from_str( "a" ) ) . is_none( ) ) ;
768
455
}
769
-
770
- #[ test]
771
- fn as_map ( ) {
772
- let _ = crate :: kv:: source:: as_map ( ( "a" , 1 ) ) ;
773
- let _ = crate :: kv:: source:: as_map ( & ( "a" , 1 ) as & dyn Source ) ;
774
- }
775
-
776
- #[ test]
777
- fn as_list ( ) {
778
- let _ = crate :: kv:: source:: as_list ( ( "a" , 1 ) ) ;
779
- let _ = crate :: kv:: source:: as_list ( & ( "a" , 1 ) as & dyn Source ) ;
780
- }
781
456
}
0 commit comments