@@ -31,6 +31,8 @@ import Foundation
31
31
/// used for serialization. It is implemented by each serialization protocol:
32
32
/// Protobuf Binary, Protobuf Text, JSON, and the Hash encoder.
33
33
public protocol Visitor {
34
+
35
+ var traversalOptions : TraversalOptions { get }
34
36
35
37
/// Called for each non-repeated float field
36
38
///
@@ -445,8 +447,27 @@ public protocol Visitor {
445
447
mutating func visitUnknown( bytes: Data ) throws
446
448
}
447
449
450
+ /// Provides options for how visitor traversal should be carried out
451
+ public struct TraversalOptions {
452
+ static let `default` = TraversalOptions ( )
453
+
454
+ /// Determines if non-optional fields that are equal to their default values should be visited.
455
+ /// Defaults to `false`.
456
+ public var visitDefaultValues : Bool
457
+
458
+ public init ( visitDefaultValues: Bool = false ) {
459
+ self . visitDefaultValues = visitDefaultValues
460
+ }
461
+ }
462
+
463
+
448
464
/// Forwarding default implementations of some visitor methods, for convenience.
449
465
extension Visitor {
466
+
467
+ // Use the default traversal options if not set
468
+ public var traversalOptions : TraversalOptions {
469
+ . default
470
+ }
450
471
451
472
// Default definitions of numeric serializations.
452
473
//
@@ -492,126 +513,108 @@ extension Visitor {
492
513
// repeated values differently from singular, so overrides these.
493
514
494
515
public mutating func visitRepeatedFloatField( value: [ Float ] , fieldNumber: Int ) throws {
495
- assert ( !value. isEmpty)
496
516
for v in value {
497
517
try visitSingularFloatField ( value: v, fieldNumber: fieldNumber)
498
518
}
499
519
}
500
520
501
521
public mutating func visitRepeatedDoubleField( value: [ Double ] , fieldNumber: Int ) throws {
502
- assert ( !value. isEmpty)
503
522
for v in value {
504
523
try visitSingularDoubleField ( value: v, fieldNumber: fieldNumber)
505
524
}
506
525
}
507
526
508
527
public mutating func visitRepeatedInt32Field( value: [ Int32 ] , fieldNumber: Int ) throws {
509
- assert ( !value. isEmpty)
510
528
for v in value {
511
529
try visitSingularInt32Field ( value: v, fieldNumber: fieldNumber)
512
530
}
513
531
}
514
532
515
533
public mutating func visitRepeatedInt64Field( value: [ Int64 ] , fieldNumber: Int ) throws {
516
- assert ( !value. isEmpty)
517
534
for v in value {
518
535
try visitSingularInt64Field ( value: v, fieldNumber: fieldNumber)
519
536
}
520
537
}
521
538
522
539
public mutating func visitRepeatedUInt32Field( value: [ UInt32 ] , fieldNumber: Int ) throws {
523
- assert ( !value. isEmpty)
524
540
for v in value {
525
541
try visitSingularUInt32Field ( value: v, fieldNumber: fieldNumber)
526
542
}
527
543
}
528
544
529
545
public mutating func visitRepeatedUInt64Field( value: [ UInt64 ] , fieldNumber: Int ) throws {
530
- assert ( !value. isEmpty)
531
546
for v in value {
532
547
try visitSingularUInt64Field ( value: v, fieldNumber: fieldNumber)
533
548
}
534
549
}
535
550
536
551
public mutating func visitRepeatedSInt32Field( value: [ Int32 ] , fieldNumber: Int ) throws {
537
- assert ( !value. isEmpty)
538
552
for v in value {
539
553
try visitSingularSInt32Field ( value: v, fieldNumber: fieldNumber)
540
554
}
541
555
}
542
556
543
557
public mutating func visitRepeatedSInt64Field( value: [ Int64 ] , fieldNumber: Int ) throws {
544
- assert ( !value. isEmpty)
545
558
for v in value {
546
559
try visitSingularSInt64Field ( value: v, fieldNumber: fieldNumber)
547
560
}
548
561
}
549
562
550
563
public mutating func visitRepeatedFixed32Field( value: [ UInt32 ] , fieldNumber: Int ) throws {
551
- assert ( !value. isEmpty)
552
564
for v in value {
553
565
try visitSingularFixed32Field ( value: v, fieldNumber: fieldNumber)
554
566
}
555
567
}
556
568
557
569
public mutating func visitRepeatedFixed64Field( value: [ UInt64 ] , fieldNumber: Int ) throws {
558
- assert ( !value. isEmpty)
559
570
for v in value {
560
571
try visitSingularFixed64Field ( value: v, fieldNumber: fieldNumber)
561
572
}
562
573
}
563
574
564
575
public mutating func visitRepeatedSFixed32Field( value: [ Int32 ] , fieldNumber: Int ) throws {
565
- assert ( !value. isEmpty)
566
576
for v in value {
567
577
try visitSingularSFixed32Field ( value: v, fieldNumber: fieldNumber)
568
578
}
569
579
}
570
580
571
581
public mutating func visitRepeatedSFixed64Field( value: [ Int64 ] , fieldNumber: Int ) throws {
572
- assert ( !value. isEmpty)
573
582
for v in value {
574
583
try visitSingularSFixed64Field ( value: v, fieldNumber: fieldNumber)
575
584
}
576
585
}
577
586
578
587
public mutating func visitRepeatedBoolField( value: [ Bool ] , fieldNumber: Int ) throws {
579
- assert ( !value. isEmpty)
580
588
for v in value {
581
589
try visitSingularBoolField ( value: v, fieldNumber: fieldNumber)
582
590
}
583
591
}
584
592
585
593
public mutating func visitRepeatedStringField( value: [ String ] , fieldNumber: Int ) throws {
586
- assert ( !value. isEmpty)
587
594
for v in value {
588
595
try visitSingularStringField ( value: v, fieldNumber: fieldNumber)
589
596
}
590
597
}
591
598
592
599
public mutating func visitRepeatedBytesField( value: [ Data ] , fieldNumber: Int ) throws {
593
- assert ( !value. isEmpty)
594
600
for v in value {
595
601
try visitSingularBytesField ( value: v, fieldNumber: fieldNumber)
596
602
}
597
603
}
598
604
599
605
public mutating func visitRepeatedEnumField< E: Enum > ( value: [ E ] , fieldNumber: Int ) throws {
600
- assert ( !value. isEmpty)
601
606
for v in value {
602
607
try visitSingularEnumField ( value: v, fieldNumber: fieldNumber)
603
608
}
604
609
}
605
610
606
611
public mutating func visitRepeatedMessageField< M: Message > ( value: [ M ] , fieldNumber: Int ) throws {
607
- assert ( !value. isEmpty)
608
612
for v in value {
609
613
try visitSingularMessageField ( value: v, fieldNumber: fieldNumber)
610
614
}
611
615
}
612
616
613
617
public mutating func visitRepeatedGroupField< G: Message > ( value: [ G ] , fieldNumber: Int ) throws {
614
- assert ( !value. isEmpty)
615
618
for v in value {
616
619
try visitSingularGroupField ( value: v, fieldNumber: fieldNumber)
617
620
}
@@ -623,73 +626,59 @@ extension Visitor {
623
626
// overridden by Protobuf Binary and Text.
624
627
625
628
public mutating func visitPackedFloatField( value: [ Float ] , fieldNumber: Int ) throws {
626
- assert ( !value. isEmpty)
627
629
try visitRepeatedFloatField ( value: value, fieldNumber: fieldNumber)
628
630
}
629
631
630
632
public mutating func visitPackedDoubleField( value: [ Double ] , fieldNumber: Int ) throws {
631
- assert ( !value. isEmpty)
632
633
try visitRepeatedDoubleField ( value: value, fieldNumber: fieldNumber)
633
634
}
634
635
635
636
public mutating func visitPackedInt32Field( value: [ Int32 ] , fieldNumber: Int ) throws {
636
- assert ( !value. isEmpty)
637
637
try visitRepeatedInt32Field ( value: value, fieldNumber: fieldNumber)
638
638
}
639
639
640
640
public mutating func visitPackedInt64Field( value: [ Int64 ] , fieldNumber: Int ) throws {
641
- assert ( !value. isEmpty)
642
641
try visitRepeatedInt64Field ( value: value, fieldNumber: fieldNumber)
643
642
}
644
643
645
644
public mutating func visitPackedUInt32Field( value: [ UInt32 ] , fieldNumber: Int ) throws {
646
- assert ( !value. isEmpty)
647
645
try visitRepeatedUInt32Field ( value: value, fieldNumber: fieldNumber)
648
646
}
649
647
650
648
public mutating func visitPackedUInt64Field( value: [ UInt64 ] , fieldNumber: Int ) throws {
651
- assert ( !value. isEmpty)
652
649
try visitRepeatedUInt64Field ( value: value, fieldNumber: fieldNumber)
653
650
}
654
651
655
652
public mutating func visitPackedSInt32Field( value: [ Int32 ] , fieldNumber: Int ) throws {
656
- assert ( !value. isEmpty)
657
653
try visitPackedInt32Field ( value: value, fieldNumber: fieldNumber)
658
654
}
659
655
660
656
public mutating func visitPackedSInt64Field( value: [ Int64 ] , fieldNumber: Int ) throws {
661
- assert ( !value. isEmpty)
662
657
try visitPackedInt64Field ( value: value, fieldNumber: fieldNumber)
663
658
}
664
659
665
660
public mutating func visitPackedFixed32Field( value: [ UInt32 ] , fieldNumber: Int ) throws {
666
- assert ( !value. isEmpty)
667
661
try visitPackedUInt32Field ( value: value, fieldNumber: fieldNumber)
668
662
}
669
663
670
664
public mutating func visitPackedFixed64Field( value: [ UInt64 ] , fieldNumber: Int ) throws {
671
- assert ( !value. isEmpty)
672
665
try visitPackedUInt64Field ( value: value, fieldNumber: fieldNumber)
673
666
}
674
667
675
668
public mutating func visitPackedSFixed32Field( value: [ Int32 ] , fieldNumber: Int ) throws {
676
- assert ( !value. isEmpty)
677
669
try visitPackedInt32Field ( value: value, fieldNumber: fieldNumber)
678
670
}
679
671
680
672
public mutating func visitPackedSFixed64Field( value: [ Int64 ] , fieldNumber: Int ) throws {
681
- assert ( !value. isEmpty)
682
673
try visitPackedInt64Field ( value: value, fieldNumber: fieldNumber)
683
674
}
684
675
685
676
public mutating func visitPackedBoolField( value: [ Bool ] , fieldNumber: Int ) throws {
686
- assert ( !value. isEmpty)
687
677
try visitRepeatedBoolField ( value: value, fieldNumber: fieldNumber)
688
678
}
689
679
690
680
public mutating func visitPackedEnumField< E: Enum > ( value: [ E ] ,
691
681
fieldNumber: Int ) throws {
692
- assert ( !value. isEmpty)
693
682
try visitRepeatedEnumField ( value: value, fieldNumber: fieldNumber)
694
683
}
695
684
0 commit comments