Skip to content

Commit

Permalink
[ObjC] Introduce the new GPBUnknownFields type.
Browse files Browse the repository at this point in the history
`GPBUnknownFields` will be the eventually replacement for `GPBUnknownFieldSet`. This
introduces the type and the changes to `GPBUnknownField`.

The new api will preserve the wire ordering of unknown fields. This is now checked
in conformance tests.

While this adds the type changes and tests them, it does not yet wire the changes
in to the rest of the Runtime, so the conformance tests still done pass.
`GPBUnknownFieldSet` also hasn't been deprecated yet, that will come in later with
the wiring in to the runtime.

PiperOrigin-RevId: 648361455
  • Loading branch information
thomasvl authored and copybara-github committed Jul 1, 2024
1 parent a4f9ddd commit 47f633e
Show file tree
Hide file tree
Showing 13 changed files with 1,374 additions and 129 deletions.
2 changes: 2 additions & 0 deletions objectivec/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ objc_library(
"GPBRootObject.h",
"GPBRuntimeTypes.h",
"GPBUnknownField.h",
"GPBUnknownFields.h",
"GPBUnknownFieldSet.h",
"GPBUtilities.h",
"GPBWellKnownTypes.h",
Expand Down Expand Up @@ -138,6 +139,7 @@ objc_library(
"GPBType.pbobjc.m",
"GPBUnknownField.m",
"GPBUnknownFieldSet.m",
"GPBUnknownFields.m",
"GPBUtilities.m",
"GPBWellKnownTypes.m",
"GPBWireFormat.m",
Expand Down
1 change: 1 addition & 0 deletions objectivec/GPBProtocolBuffers.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#import "GPBRootObject.h"
#import "GPBUnknownField.h"
#import "GPBUnknownFieldSet.h"
#import "GPBUnknownFields.h"
#import "GPBUtilities.h"
#import "GPBWellKnownTypes.h"
#import "GPBWireFormat.h"
Expand Down
1 change: 1 addition & 0 deletions objectivec/GPBProtocolBuffers.m
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#import "GPBRootObject.m"
#import "GPBUnknownField.m"
#import "GPBUnknownFieldSet.m"
#import "GPBUnknownFields.m"
#import "GPBUtilities.m"
#import "GPBWellKnownTypes.m"
#import "GPBWireFormat.m"
Expand Down
106 changes: 101 additions & 5 deletions objectivec/GPBUnknownField.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,25 @@
@class GPBUInt32Array;
@class GPBUInt64Array;
@class GPBUnknownFieldSet;
@class GPBUnknownFields;

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(uint8_t, GPBUnknownFieldType) {
GPBUnknownFieldTypeVarint,
GPBUnknownFieldTypeFixed32,
GPBUnknownFieldTypeFixed64,
GPBUnknownFieldTypeLengthDelimited, // Length prefixed
GPBUnknownFieldTypeGroup, // Tag delimited

/**
* This type is only used with fields from `GPBUnknownFieldsSet`. Some methods
* only work with instances with this type and other apis require the other
* type(s). It is a programming error to use the wrong methods.
**/
GPBUnknownFieldTypeLegacy,
};

/**
* Store an unknown field. These are used in conjunction with
* GPBUnknownFieldSet.
Expand All @@ -26,48 +43,127 @@ __attribute__((objc_subclassing_restricted))
/** The field number the data is stored under. */
@property(nonatomic, readonly, assign) int32_t number;

/** An array of varint values for this field. */
/** The type of the field. */
@property(nonatomic, readonly, assign) GPBUnknownFieldType type;

/**
* Fetch the varint value.
*
* It is a programming error to call this when the `type` is not a varint.
*/
@property(nonatomic, readonly, assign) uint64_t varint;

/**
* Fetch the fixed32 value.
*
* It is a programming error to call this when the `type` is not a fixed32.
*/
@property(nonatomic, readonly, assign) uint32_t fixed32;

/**
* Fetch the fixed64 value.
*
* It is a programming error to call this when the `type` is not a fixed64.
*/
@property(nonatomic, readonly, assign) uint64_t fixed64;

/**
* Fetch the length delimited (length prefixed) value.
*
* It is a programming error to call this when the `type` is not a length
* delimited.
*/
@property(nonatomic, readonly, strong, nonnull) NSData *lengthDelimited;

/**
* Fetch the group (tag delimited) value.
*
* It is a programming error to call this when the `type` is not a group.
*/
@property(nonatomic, readonly, strong, nonnull) GPBUnknownFields *group;

/**
* An array of varint values for this field.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*/
@property(nonatomic, readonly, strong) GPBUInt64Array *varintList;

/** An array of fixed32 values for this field. */
/**
* An array of fixed32 values for this field.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*/
@property(nonatomic, readonly, strong) GPBUInt32Array *fixed32List;

/** An array of fixed64 values for this field. */
/**
* An array of fixed64 values for this field.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*/
@property(nonatomic, readonly, strong) GPBUInt64Array *fixed64List;

/** An array of data values for this field. */
/**
* An array of data values for this field.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*/
@property(nonatomic, readonly, strong) NSArray<NSData *> *lengthDelimitedList;

/** An array of groups of values for this field. */
/**
* An array of groups of values for this field.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*/
@property(nonatomic, readonly, strong) NSArray<GPBUnknownFieldSet *> *groupList;

/**
* Add a value to the varintList.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*
* @param value The value to add.
**/
- (void)addVarint:(uint64_t)value;
/**
* Add a value to the fixed32List.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*
* @param value The value to add.
**/
- (void)addFixed32:(uint32_t)value;
/**
* Add a value to the fixed64List.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*
* @param value The value to add.
**/
- (void)addFixed64:(uint64_t)value;
/**
* Add a value to the lengthDelimitedList.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*
* @param value The value to add.
**/
- (void)addLengthDelimited:(NSData *)value;
/**
* Add a value to the groupList.
*
* Only valid for type == GPBUnknownFieldTypeLegacy, it is a programming error
* to use with any other type.
*
* @param value The value to add.
**/
- (void)addGroup:(GPBUnknownFieldSet *)value;
Expand Down
Loading

0 comments on commit 47f633e

Please sign in to comment.