Commit 106f3eb9 authored by Paul Yang's avatar Paul Yang

Merge pull request #750 from TeBoring/beta-1

Fix bugs for objectivec
parents e94e062b aca5a608
...@@ -68,6 +68,7 @@ fi ...@@ -68,6 +68,7 @@ fi
mkdir -p "${OUTPUT_DIR}/google/protobuf" mkdir -p "${OUTPUT_DIR}/google/protobuf"
CORE_PROTO_FILES=( \ CORE_PROTO_FILES=( \
src/google/protobuf/unittest_arena.proto \
src/google/protobuf/unittest_custom_options.proto \ src/google/protobuf/unittest_custom_options.proto \
src/google/protobuf/unittest_enormous_descriptor.proto \ src/google/protobuf/unittest_enormous_descriptor.proto \
src/google/protobuf/unittest_embed_optimize_for.proto \ src/google/protobuf/unittest_embed_optimize_for.proto \
...@@ -76,6 +77,9 @@ CORE_PROTO_FILES=( \ ...@@ -76,6 +77,9 @@ CORE_PROTO_FILES=( \
src/google/protobuf/unittest_import_lite.proto \ src/google/protobuf/unittest_import_lite.proto \
src/google/protobuf/unittest_lite.proto \ src/google/protobuf/unittest_lite.proto \
src/google/protobuf/unittest_mset.proto \ src/google/protobuf/unittest_mset.proto \
src/google/protobuf/unittest_mset_wire_format.proto \
src/google/protobuf/unittest_no_arena.proto \
src/google/protobuf/unittest_no_arena_import.proto \
src/google/protobuf/unittest_no_generic_services.proto \ src/google/protobuf/unittest_no_generic_services.proto \
src/google/protobuf/unittest_optimize_for.proto \ src/google/protobuf/unittest_optimize_for.proto \
src/google/protobuf/unittest.proto \ src/google/protobuf/unittest.proto \
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#import "google/protobuf/MapProto2Unittest.pbobjc.m" #import "google/protobuf/MapProto2Unittest.pbobjc.m"
#import "google/protobuf/MapUnittest.pbobjc.m" #import "google/protobuf/MapUnittest.pbobjc.m"
#import "google/protobuf/Unittest.pbobjc.m" #import "google/protobuf/Unittest.pbobjc.m"
#import "google/protobuf/UnittestArena.pbobjc.m"
#import "google/protobuf/UnittestCustomOptions.pbobjc.m" #import "google/protobuf/UnittestCustomOptions.pbobjc.m"
#import "google/protobuf/UnittestCycle.pbobjc.m" #import "google/protobuf/UnittestCycle.pbobjc.m"
#import "google/protobuf/UnittestDropUnknownFields.pbobjc.m" #import "google/protobuf/UnittestDropUnknownFields.pbobjc.m"
...@@ -46,6 +47,9 @@ ...@@ -46,6 +47,9 @@
#import "google/protobuf/UnittestImportPublicLite.pbobjc.m" #import "google/protobuf/UnittestImportPublicLite.pbobjc.m"
#import "google/protobuf/UnittestLite.pbobjc.m" #import "google/protobuf/UnittestLite.pbobjc.m"
#import "google/protobuf/UnittestMset.pbobjc.m" #import "google/protobuf/UnittestMset.pbobjc.m"
#import "google/protobuf/UnittestMsetWireFormat.pbobjc.m"
#import "google/protobuf/UnittestNoArena.pbobjc.m"
#import "google/protobuf/UnittestNoArenaImport.pbobjc.m"
#import "google/protobuf/UnittestNoGenericServices.pbobjc.m" #import "google/protobuf/UnittestNoGenericServices.pbobjc.m"
#import "google/protobuf/UnittestObjc.pbobjc.m" #import "google/protobuf/UnittestObjc.pbobjc.m"
#import "google/protobuf/UnittestObjcStartup.pbobjc.m" #import "google/protobuf/UnittestObjcStartup.pbobjc.m"
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#import "GPBUnknownField_PackagePrivate.h" #import "GPBUnknownField_PackagePrivate.h"
#import "google/protobuf/Unittest.pbobjc.h" #import "google/protobuf/Unittest.pbobjc.h"
#import "google/protobuf/UnittestMset.pbobjc.h" #import "google/protobuf/UnittestMset.pbobjc.h"
#import "google/protobuf/UnittestMsetWireFormat.pbobjc.h"
@interface WireFormatTests : GPBTestCase @interface WireFormatTests : GPBTestCase
@end @end
......
...@@ -34,10 +34,8 @@ typedef GPB_ENUM(GPBAny_FieldNumber) { ...@@ -34,10 +34,8 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
// `Any` contains an arbitrary serialized message along with a URL // `Any` contains an arbitrary serialized message along with a URL
// that describes the type of the serialized message. // that describes the type of the serialized message.
// //
// The proto runtimes and/or compiler will eventually // JSON
// provide utilities to pack/unpack Any values (projected Q1/15). // ====
//
// # JSON
// The JSON representation of an `Any` value uses the regular // The JSON representation of an `Any` value uses the regular
// representation of the deserialized, embedded message, with an // representation of the deserialized, embedded message, with an
// additional field `@type` which contains the type URL. Example: // additional field `@type` which contains the type URL. Example:
...@@ -84,11 +82,6 @@ typedef GPB_ENUM(GPBAny_FieldNumber) { ...@@ -84,11 +82,6 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
// //
// Schemas other than `http`, `https` (or the empty schema) might be // Schemas other than `http`, `https` (or the empty schema) might be
// used with implementation specific semantics. // used with implementation specific semantics.
//
// Types originating from the `google.*` package
// namespace should use `type.googleapis.com/full.type.name` (without
// schema and path). A type service will eventually become available which
// serves those URLs (projected Q2/15).
@property(nonatomic, readwrite, copy, null_resettable) NSString *typeURL; @property(nonatomic, readwrite, copy, null_resettable) NSString *typeURL;
// Must be valid serialized data of the above specified type. // Must be valid serialized data of the above specified type.
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
CF_EXTERN_C_BEGIN CF_EXTERN_C_BEGIN
@class GPBSourceContext; @class GPBSourceContext;
GPB_ENUM_FWD_DECLARE(GPBSyntax);
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
...@@ -34,6 +35,8 @@ typedef GPB_ENUM(GPBApi_FieldNumber) { ...@@ -34,6 +35,8 @@ typedef GPB_ENUM(GPBApi_FieldNumber) {
GPBApi_FieldNumber_OptionsArray = 3, GPBApi_FieldNumber_OptionsArray = 3,
GPBApi_FieldNumber_Version = 4, GPBApi_FieldNumber_Version = 4,
GPBApi_FieldNumber_SourceContext = 5, GPBApi_FieldNumber_SourceContext = 5,
GPBApi_FieldNumber_MixinsArray = 6,
GPBApi_FieldNumber_Syntax = 7,
}; };
// Api is a light-weight descriptor for a protocol buffer service. // Api is a light-weight descriptor for a protocol buffer service.
...@@ -73,8 +76,6 @@ typedef GPB_ENUM(GPBApi_FieldNumber) { ...@@ -73,8 +76,6 @@ typedef GPB_ENUM(GPBApi_FieldNumber) {
// `google.feature.v1`. For major versions 0 and 1, the suffix can // `google.feature.v1`. For major versions 0 and 1, the suffix can
// be omitted. Zero major versions must only be used for // be omitted. Zero major versions must only be used for
// experimental, none-GA apis. // experimental, none-GA apis.
//
// See also: [design doc](http://go/api-versioning).
@property(nonatomic, readwrite, copy, null_resettable) NSString *version; @property(nonatomic, readwrite, copy, null_resettable) NSString *version;
// Source context for the protocol buffer service represented by this // Source context for the protocol buffer service represented by this
...@@ -82,8 +83,19 @@ typedef GPB_ENUM(GPBApi_FieldNumber) { ...@@ -82,8 +83,19 @@ typedef GPB_ENUM(GPBApi_FieldNumber) {
@property(nonatomic, readwrite) BOOL hasSourceContext; @property(nonatomic, readwrite) BOOL hasSourceContext;
@property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext; @property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext;
// Included APIs. See [Mixin][].
// |mixinsArray| contains |GPBMixin|
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *mixinsArray;
@property(nonatomic, readonly) NSUInteger mixinsArray_Count;
// The source syntax of the service.
@property(nonatomic, readwrite) enum GPBSyntax syntax;
@end @end
int32_t GPBApi_Syntax_RawValue(GPBApi *message);
void SetGPBApi_Syntax_RawValue(GPBApi *message, int32_t value);
#pragma mark - GPBMethod #pragma mark - GPBMethod
typedef GPB_ENUM(GPBMethod_FieldNumber) { typedef GPB_ENUM(GPBMethod_FieldNumber) {
...@@ -93,6 +105,7 @@ typedef GPB_ENUM(GPBMethod_FieldNumber) { ...@@ -93,6 +105,7 @@ typedef GPB_ENUM(GPBMethod_FieldNumber) {
GPBMethod_FieldNumber_ResponseTypeURL = 4, GPBMethod_FieldNumber_ResponseTypeURL = 4,
GPBMethod_FieldNumber_ResponseStreaming = 5, GPBMethod_FieldNumber_ResponseStreaming = 5,
GPBMethod_FieldNumber_OptionsArray = 6, GPBMethod_FieldNumber_OptionsArray = 6,
GPBMethod_FieldNumber_Syntax = 7,
}; };
// Method represents a method of an api. // Method represents a method of an api.
...@@ -118,6 +131,108 @@ typedef GPB_ENUM(GPBMethod_FieldNumber) { ...@@ -118,6 +131,108 @@ typedef GPB_ENUM(GPBMethod_FieldNumber) {
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *optionsArray; @property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *optionsArray;
@property(nonatomic, readonly) NSUInteger optionsArray_Count; @property(nonatomic, readonly) NSUInteger optionsArray_Count;
// The source syntax of this method.
@property(nonatomic, readwrite) enum GPBSyntax syntax;
@end
int32_t GPBMethod_Syntax_RawValue(GPBMethod *message);
void SetGPBMethod_Syntax_RawValue(GPBMethod *message, int32_t value);
#pragma mark - GPBMixin
typedef GPB_ENUM(GPBMixin_FieldNumber) {
GPBMixin_FieldNumber_Name = 1,
GPBMixin_FieldNumber_Root = 2,
};
// Declares an API to be included in this API. The including API must
// redeclare all the methods from the included API, but documentation
// and options are inherited as follows:
//
// - If after comment and whitespace stripping, the documentation
// string of the redeclared method is empty, it will be inherited
// from the original method.
//
// - Each annotation belonging to the service config (http,
// visibility) which is not set in the redeclared method will be
// inherited.
//
// - If an http annotation is inherited, the path pattern will be
// modified as follows. Any version prefix will be replaced by the
// version of the including API plus the [root][] path if specified.
//
// Example of a simple mixin:
//
// package google.acl.v1;
// service AccessControl {
// // Get the underlying ACL object.
// rpc GetAcl(GetAclRequest) returns (Acl) {
// option (google.api.http).get = "/v1/{resource=**}:getAcl";
// }
// }
//
// package google.storage.v2;
// service Storage {
// // (-- see AccessControl.GetAcl --)
// rpc GetAcl(GetAclRequest) returns (Acl);
//
// // Get a data record.
// rpc GetData(GetDataRequest) returns (Data) {
// option (google.api.http).get = "/v2/{resource=**}";
// }
// }
//
// Example of a mixin configuration:
//
// apis:
// - name: google.storage.v2.Storage
// mixins:
// - name: google.acl.v1.AccessControl
//
// The mixin construct implies that all methods in `AccessControl` are
// also declared with same name and request/response types in
// `Storage`. A documentation generator or annotation processor will
// see the effective `Storage.GetAcl` method after inherting
// documentation and annotations as follows:
//
// service Storage {
// // Get the underlying ACL object.
// rpc GetAcl(GetAclRequest) returns (Acl) {
// option (google.api.http).get = "/v2/{resource=**}:getAcl";
// }
// ...
// }
//
// Note how the version in the path pattern changed from `v1` to `v2`.
//
// If the `root` field in the mixin is specified, it should be a
// relative path under which inherited HTTP paths are placed. Example:
//
// apis:
// - name: google.storage.v2.Storage
// mixins:
// - name: google.acl.v1.AccessControl
// root: acls
//
// This implies the following inherited HTTP annotation:
//
// service Storage {
// // Get the underlying ACL object.
// rpc GetAcl(GetAclRequest) returns (Acl) {
// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
// }
// ...
// }
@interface GPBMixin : GPBMessage
// The fully qualified name of the API which is included.
@property(nonatomic, readwrite, copy, null_resettable) NSString *name;
// If non-empty specifies a path under which inherited HTTP paths
// are rooted.
@property(nonatomic, readwrite, copy, null_resettable) NSString *root;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
......
...@@ -49,14 +49,18 @@ static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) { ...@@ -49,14 +49,18 @@ static GPBFileDescriptor *GPBApiRoot_FileDescriptor(void) {
@dynamic optionsArray, optionsArray_Count; @dynamic optionsArray, optionsArray_Count;
@dynamic version; @dynamic version;
@dynamic hasSourceContext, sourceContext; @dynamic hasSourceContext, sourceContext;
@dynamic mixinsArray, mixinsArray_Count;
@dynamic syntax;
typedef struct GPBApi__storage_ { typedef struct GPBApi__storage_ {
uint32_t _has_storage_[1]; uint32_t _has_storage_[1];
GPBSyntax syntax;
NSString *name; NSString *name;
NSMutableArray *methodsArray; NSMutableArray *methodsArray;
NSMutableArray *optionsArray; NSMutableArray *optionsArray;
NSString *version; NSString *version;
GPBSourceContext *sourceContext; GPBSourceContext *sourceContext;
NSMutableArray *mixinsArray;
} GPBApi__storage_; } GPBApi__storage_;
// This method is threadsafe because it is initially called // This method is threadsafe because it is initially called
...@@ -120,6 +124,28 @@ typedef struct GPBApi__storage_ { ...@@ -120,6 +124,28 @@ typedef struct GPBApi__storage_ {
.dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext), .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
.fieldOptions = NULL, .fieldOptions = NULL,
}, },
{
.name = "mixinsArray",
.number = GPBApi_FieldNumber_MixinsArray,
.hasIndex = GPBNoHasBit,
.flags = GPBFieldRepeated,
.dataType = GPBDataTypeMessage,
.offset = offsetof(GPBApi__storage_, mixinsArray),
.defaultValue.valueMessage = nil,
.dataTypeSpecific.className = GPBStringifySymbol(GPBMixin),
.fieldOptions = NULL,
},
{
.name = "syntax",
.number = GPBApi_FieldNumber_Syntax,
.hasIndex = 6,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
.dataType = GPBDataTypeEnum,
.offset = offsetof(GPBApi__storage_, syntax),
.defaultValue.valueEnum = GPBSyntax_SyntaxProto2,
.dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor,
.fieldOptions = NULL,
},
}; };
GPBDescriptor *localDescriptor = GPBDescriptor *localDescriptor =
[GPBDescriptor allocDescriptorForClass:[GPBApi class] [GPBDescriptor allocDescriptorForClass:[GPBApi class]
...@@ -143,6 +169,18 @@ typedef struct GPBApi__storage_ { ...@@ -143,6 +169,18 @@ typedef struct GPBApi__storage_ {
@end @end
int32_t GPBApi_Syntax_RawValue(GPBApi *message) {
GPBDescriptor *descriptor = [GPBApi descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBApi_FieldNumber_Syntax];
return GPBGetMessageInt32Field(message, field);
}
void SetGPBApi_Syntax_RawValue(GPBApi *message, int32_t value) {
GPBDescriptor *descriptor = [GPBApi descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBApi_FieldNumber_Syntax];
GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}
#pragma mark - GPBMethod #pragma mark - GPBMethod
@implementation GPBMethod @implementation GPBMethod
...@@ -153,11 +191,13 @@ typedef struct GPBApi__storage_ { ...@@ -153,11 +191,13 @@ typedef struct GPBApi__storage_ {
@dynamic responseTypeURL; @dynamic responseTypeURL;
@dynamic responseStreaming; @dynamic responseStreaming;
@dynamic optionsArray, optionsArray_Count; @dynamic optionsArray, optionsArray_Count;
@dynamic syntax;
typedef struct GPBMethod__storage_ { typedef struct GPBMethod__storage_ {
uint32_t _has_storage_[1]; uint32_t _has_storage_[1];
BOOL requestStreaming; BOOL requestStreaming;
BOOL responseStreaming; BOOL responseStreaming;
GPBSyntax syntax;
NSString *name; NSString *name;
NSString *requestTypeURL; NSString *requestTypeURL;
NSString *responseTypeURL; NSString *responseTypeURL;
...@@ -236,6 +276,17 @@ typedef struct GPBMethod__storage_ { ...@@ -236,6 +276,17 @@ typedef struct GPBMethod__storage_ {
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption), .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL, .fieldOptions = NULL,
}, },
{
.name = "syntax",
.number = GPBMethod_FieldNumber_Syntax,
.hasIndex = 6,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
.dataType = GPBDataTypeEnum,
.offset = offsetof(GPBMethod__storage_, syntax),
.defaultValue.valueEnum = GPBSyntax_SyntaxProto2,
.dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor,
.fieldOptions = NULL,
},
}; };
#if GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS #if GPBOBJC_SKIP_MESSAGE_TEXTFORMAT_EXTRAS
const char *extraTextFormatInfo = NULL; const char *extraTextFormatInfo = NULL;
...@@ -265,5 +316,81 @@ typedef struct GPBMethod__storage_ { ...@@ -265,5 +316,81 @@ typedef struct GPBMethod__storage_ {
@end @end
int32_t GPBMethod_Syntax_RawValue(GPBMethod *message) {
GPBDescriptor *descriptor = [GPBMethod descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBMethod_FieldNumber_Syntax];
return GPBGetMessageInt32Field(message, field);
}
void SetGPBMethod_Syntax_RawValue(GPBMethod *message, int32_t value) {
GPBDescriptor *descriptor = [GPBMethod descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBMethod_FieldNumber_Syntax];
GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}
#pragma mark - GPBMixin
@implementation GPBMixin
@dynamic name;
@dynamic root;
typedef struct GPBMixin__storage_ {
uint32_t _has_storage_[1];
NSString *name;
NSString *root;
} GPBMixin__storage_;
// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
static GPBDescriptor *descriptor = nil;
if (!descriptor) {
static GPBMessageFieldDescription fields[] = {
{
.name = "name",
.number = GPBMixin_FieldNumber_Name,
.hasIndex = 0,
.flags = GPBFieldOptional,
.dataType = GPBDataTypeString,
.offset = offsetof(GPBMixin__storage_, name),
.defaultValue.valueString = nil,
.dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{
.name = "root",
.number = GPBMixin_FieldNumber_Root,
.hasIndex = 1,
.flags = GPBFieldOptional,
.dataType = GPBDataTypeString,
.offset = offsetof(GPBMixin__storage_, root),
.defaultValue.valueString = nil,
.dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
};
GPBDescriptor *localDescriptor =
[GPBDescriptor allocDescriptorForClass:[GPBMixin class]
rootClass:[GPBApiRoot class]
file:GPBApiRoot_FileDescriptor()
fields:fields
fieldCount:sizeof(fields) / sizeof(GPBMessageFieldDescription)
oneofs:NULL
oneofCount:0
enums:NULL
enumCount:0
ranges:NULL
rangeCount:0
storageSize:sizeof(GPBMixin__storage_)
wireFormat:NO];
NSAssert(descriptor == nil, @"Startup recursed!");
descriptor = localDescriptor;
}
return descriptor;
}
@end
// @@protoc_insertion_point(global_scope) // @@protoc_insertion_point(global_scope)
...@@ -531,6 +531,7 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) { ...@@ -531,6 +531,7 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) {
GPBFileOptions_FieldNumber_CcEnableArenas = 31, GPBFileOptions_FieldNumber_CcEnableArenas = 31,
GPBFileOptions_FieldNumber_ObjcClassPrefix = 36, GPBFileOptions_FieldNumber_ObjcClassPrefix = 36,
GPBFileOptions_FieldNumber_CsharpNamespace = 37, GPBFileOptions_FieldNumber_CsharpNamespace = 37,
GPBFileOptions_FieldNumber_JavananoUseDeprecatedPackage = 38,
GPBFileOptions_FieldNumber_UninterpretedOptionArray = 999, GPBFileOptions_FieldNumber_UninterpretedOptionArray = 999,
}; };
...@@ -562,10 +563,12 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) { ...@@ -562,10 +563,12 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) {
// If set true, then the Java code generator will generate equals() and // If set true, then the Java code generator will generate equals() and
// hashCode() methods for all messages defined in the .proto file. // hashCode() methods for all messages defined in the .proto file.
// - In the full runtime, this is purely a speed optimization, as the // This increases generated code size, potentially substantially for large
// protos, which may harm a memory-constrained application.
// - In the full runtime this is a speed optimization, as the
// AbstractMessage base class includes reflection-based implementations of // AbstractMessage base class includes reflection-based implementations of
// these methods. // these methods.
//- In the lite runtime, setting this option changes the semantics of // - In the lite runtime, setting this option changes the semantics of
// equals() and hashCode() to more closely match those of the full runtime; // equals() and hashCode() to more closely match those of the full runtime;
// the generated methods compute their results based on field values rather // the generated methods compute their results based on field values rather
// than object identity. (Implementations should not assume that hashcodes // than object identity. (Implementations should not assume that hashcodes
...@@ -633,6 +636,11 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) { ...@@ -633,6 +636,11 @@ typedef GPB_ENUM(GPBFileOptions_FieldNumber) {
@property(nonatomic, readwrite) BOOL hasCsharpNamespace; @property(nonatomic, readwrite) BOOL hasCsharpNamespace;
@property(nonatomic, readwrite, copy, null_resettable) NSString *csharpNamespace; @property(nonatomic, readwrite, copy, null_resettable) NSString *csharpNamespace;
// Whether the nano proto compiler should generate in the deprecated non-nano
// suffixed package.
@property(nonatomic, readwrite) BOOL hasJavananoUseDeprecatedPackage;
@property(nonatomic, readwrite) BOOL javananoUseDeprecatedPackage;
// The parser stores options it doesn't recognize here. See above. // The parser stores options it doesn't recognize here. See above.
// |uninterpretedOptionArray| contains |GPBUninterpretedOption| // |uninterpretedOptionArray| contains |GPBUninterpretedOption|
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *uninterpretedOptionArray; @property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *uninterpretedOptionArray;
......
...@@ -1229,6 +1229,7 @@ typedef struct GPBMethodDescriptorProto__storage_ { ...@@ -1229,6 +1229,7 @@ typedef struct GPBMethodDescriptorProto__storage_ {
@dynamic hasCcEnableArenas, ccEnableArenas; @dynamic hasCcEnableArenas, ccEnableArenas;
@dynamic hasObjcClassPrefix, objcClassPrefix; @dynamic hasObjcClassPrefix, objcClassPrefix;
@dynamic hasCsharpNamespace, csharpNamespace; @dynamic hasCsharpNamespace, csharpNamespace;
@dynamic hasJavananoUseDeprecatedPackage, javananoUseDeprecatedPackage;
@dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count; @dynamic uninterpretedOptionArray, uninterpretedOptionArray_Count;
typedef struct GPBFileOptions__storage_ { typedef struct GPBFileOptions__storage_ {
...@@ -1241,6 +1242,7 @@ typedef struct GPBFileOptions__storage_ { ...@@ -1241,6 +1242,7 @@ typedef struct GPBFileOptions__storage_ {
BOOL deprecated; BOOL deprecated;
BOOL javaStringCheckUtf8; BOOL javaStringCheckUtf8;
BOOL ccEnableArenas; BOOL ccEnableArenas;
BOOL javananoUseDeprecatedPackage;
GPBFileOptions_OptimizeMode optimizeFor; GPBFileOptions_OptimizeMode optimizeFor;
NSString *javaPackage; NSString *javaPackage;
NSString *javaOuterClassname; NSString *javaOuterClassname;
...@@ -1410,6 +1412,17 @@ typedef struct GPBFileOptions__storage_ { ...@@ -1410,6 +1412,17 @@ typedef struct GPBFileOptions__storage_ {
.dataTypeSpecific.className = NULL, .dataTypeSpecific.className = NULL,
.fieldOptions = NULL, .fieldOptions = NULL,
}, },
{
.name = "javananoUseDeprecatedPackage",
.number = GPBFileOptions_FieldNumber_JavananoUseDeprecatedPackage,
.hasIndex = 14,
.flags = GPBFieldOptional,
.dataType = GPBDataTypeBool,
.offset = offsetof(GPBFileOptions__storage_, javananoUseDeprecatedPackage),
.defaultValue.valueBool = NO,
.dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
{ {
.name = "uninterpretedOptionArray", .name = "uninterpretedOptionArray",
.number = GPBFileOptions_FieldNumber_UninterpretedOptionArray, .number = GPBFileOptions_FieldNumber_UninterpretedOptionArray,
......
...@@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN
// service Foo { // service Foo {
// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); // rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
// } // }
//
// The JSON representation for `Empty` is empty JSON object `{}`.
@interface GPBEmpty : GPBMessage @interface GPBEmpty : GPBMessage
@end @end
......
...@@ -44,6 +44,7 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) { ...@@ -44,6 +44,7 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
// Field masks also have a custom JSON encoding (see below). // Field masks also have a custom JSON encoding (see below).
// //
// # Field Masks in Projections // # Field Masks in Projections
//
// When used in the context of a projection, a response message or // When used in the context of a projection, a response message or
// sub-message is filtered by the API to only contain those fields as // sub-message is filtered by the API to only contain those fields as
// specified in the mask. For example, if the mask in the previous // specified in the mask. For example, if the mask in the previous
...@@ -89,6 +90,7 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) { ...@@ -89,6 +90,7 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
// behavior for APIs. // behavior for APIs.
// //
// # Field Masks in Update Operations // # Field Masks in Update Operations
//
// A field mask in update operations specifies which fields of the // A field mask in update operations specifies which fields of the
// targeted resource are going to be updated. The API is required // targeted resource are going to be updated. The API is required
// to only change the values of the fields as specified in the mask // to only change the values of the fields as specified in the mask
...@@ -116,11 +118,13 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) { ...@@ -116,11 +118,13 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
// required to be honored by the API. // required to be honored by the API.
// //
// ## Considerations for HTTP REST // ## Considerations for HTTP REST
//
// The HTTP kind of an update operation which uses a field mask must // The HTTP kind of an update operation which uses a field mask must
// be set to PATCH instead of PUT in order to satisfy HTTP semantics // be set to PATCH instead of PUT in order to satisfy HTTP semantics
// (PUT must only be used for full updates). // (PUT must only be used for full updates).
// //
// # JSON Encoding of Field Masks // # JSON Encoding of Field Masks
//
// In JSON, a field mask is encoded as a single string where paths are // In JSON, a field mask is encoded as a single string where paths are
// separated by a comma. Fields name in each path are converted // separated by a comma. Fields name in each path are converted
// to/from lower-camel naming conventions. // to/from lower-camel naming conventions.
......
...@@ -18,8 +18,10 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -18,8 +18,10 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Enum GPBNullValue #pragma mark - Enum GPBNullValue
// `NullValue` is a singleton enumeration to represent the null // `NullValue` is a singleton enumeration to represent the null value for the
// value for the `Value` type union. // `Value` type union.
//
// The JSON representation for `NullValue` is JSON `null`.
typedef GPB_ENUM(GPBNullValue) { typedef GPB_ENUM(GPBNullValue) {
GPBNullValue_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue, GPBNullValue_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
// Null value. // Null value.
...@@ -53,6 +55,8 @@ typedef GPB_ENUM(GPBStruct_FieldNumber) { ...@@ -53,6 +55,8 @@ typedef GPB_ENUM(GPBStruct_FieldNumber) {
// scripting languages like JS a struct is represented as an // scripting languages like JS a struct is represented as an
// object. The details of that representation are described together // object. The details of that representation are described together
// with the proto support for the language. // with the proto support for the language.
//
// The JSON representation for `Struct` is JSON object.
@interface GPBStruct : GPBMessage @interface GPBStruct : GPBMessage
// Map of dynamically typed values. // Map of dynamically typed values.
...@@ -87,8 +91,11 @@ typedef GPB_ENUM(GPBValue_Kind_OneOfCase) { ...@@ -87,8 +91,11 @@ typedef GPB_ENUM(GPBValue_Kind_OneOfCase) {
// null, a number, a string, a boolean, a recursive struct value, or a // null, a number, a string, a boolean, a recursive struct value, or a
// list of values. A producer of value is expected to set one of that // list of values. A producer of value is expected to set one of that
// variants, absence of any variant indicates an error. // variants, absence of any variant indicates an error.
//
// The JSON representation for `Value` is JSON value.
@interface GPBValue : GPBMessage @interface GPBValue : GPBMessage
// The kind of value.
@property(nonatomic, readonly) GPBValue_Kind_OneOfCase kindOneOfCase; @property(nonatomic, readonly) GPBValue_Kind_OneOfCase kindOneOfCase;
// Represents a null value. // Represents a null value.
...@@ -123,6 +130,8 @@ typedef GPB_ENUM(GPBListValue_FieldNumber) { ...@@ -123,6 +130,8 @@ typedef GPB_ENUM(GPBListValue_FieldNumber) {
}; };
// `ListValue` is a wrapper around a repeated field of values. // `ListValue` is a wrapper around a repeated field of values.
//
// The JSON representation for `ListValue` is JSON array.
@interface GPBListValue : GPBMessage @interface GPBListValue : GPBMessage
// Repeated field of dynamically typed values. // Repeated field of dynamically typed values.
......
...@@ -77,11 +77,12 @@ typedef GPB_ENUM(GPBTimestamp_FieldNumber) { ...@@ -77,11 +77,12 @@ typedef GPB_ENUM(GPBTimestamp_FieldNumber) {
// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) // Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
// .setNanos((int) ((millis % 1000) * 1000000)).build(); // .setNanos((int) ((millis % 1000) * 1000000)).build();
// //
// Example 5: Compute Timestamp from Python `datetime.datetime`.
// //
// now = datetime.datetime.utcnow() // Example 5: Compute Timestamp from current time in Python.
// seconds = int(time.mktime(now.timetuple())) //
// nanos = now.microsecond * 1000 // now = time.time()
// seconds = int(now)
// nanos = int((now - seconds) * 10**9)
// timestamp = Timestamp(seconds=seconds, nanos=nanos) // timestamp = Timestamp(seconds=seconds, nanos=nanos)
@interface GPBTimestamp : GPBMessage @interface GPBTimestamp : GPBMessage
......
...@@ -16,6 +16,22 @@ CF_EXTERN_C_BEGIN ...@@ -16,6 +16,22 @@ CF_EXTERN_C_BEGIN
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
#pragma mark - Enum GPBSyntax
// Syntax specifies the syntax in which a service element was defined.
typedef GPB_ENUM(GPBSyntax) {
GPBSyntax_GPBUnrecognizedEnumeratorValue = kGPBUnrecognizedEnumeratorValue,
// Syntax "proto2"
GPBSyntax_SyntaxProto2 = 0,
// Syntax "proto3"
GPBSyntax_SyntaxProto3 = 1,
};
GPBEnumDescriptor *GPBSyntax_EnumDescriptor(void);
BOOL GPBSyntax_IsValidValue(int32_t value);
#pragma mark - Enum GPBField_Kind #pragma mark - Enum GPBField_Kind
// Kind represents a basic field type. // Kind represents a basic field type.
...@@ -51,6 +67,9 @@ typedef GPB_ENUM(GPBField_Kind) { ...@@ -51,6 +67,9 @@ typedef GPB_ENUM(GPBField_Kind) {
// Field type string. // Field type string.
GPBField_Kind_TypeString = 9, GPBField_Kind_TypeString = 9,
// Field type group (deprecated proto2 type)
GPBField_Kind_TypeGroup = 10,
// Field type message. // Field type message.
GPBField_Kind_TypeMessage = 11, GPBField_Kind_TypeMessage = 11,
...@@ -122,6 +141,7 @@ typedef GPB_ENUM(GPBType_FieldNumber) { ...@@ -122,6 +141,7 @@ typedef GPB_ENUM(GPBType_FieldNumber) {
GPBType_FieldNumber_OneofsArray = 3, GPBType_FieldNumber_OneofsArray = 3,
GPBType_FieldNumber_OptionsArray = 4, GPBType_FieldNumber_OptionsArray = 4,
GPBType_FieldNumber_SourceContext = 5, GPBType_FieldNumber_SourceContext = 5,
GPBType_FieldNumber_Syntax = 6,
}; };
// A light-weight descriptor for a proto message type. // A light-weight descriptor for a proto message type.
...@@ -136,7 +156,6 @@ typedef GPB_ENUM(GPBType_FieldNumber) { ...@@ -136,7 +156,6 @@ typedef GPB_ENUM(GPBType_FieldNumber) {
@property(nonatomic, readonly) NSUInteger fieldsArray_Count; @property(nonatomic, readonly) NSUInteger fieldsArray_Count;
// The list of oneof definitions. // The list of oneof definitions.
// The list of oneofs declared in this Type
// |oneofsArray| contains |NSString| // |oneofsArray| contains |NSString|
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *oneofsArray; @property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *oneofsArray;
@property(nonatomic, readonly) NSUInteger oneofsArray_Count; @property(nonatomic, readonly) NSUInteger oneofsArray_Count;
...@@ -150,8 +169,14 @@ typedef GPB_ENUM(GPBType_FieldNumber) { ...@@ -150,8 +169,14 @@ typedef GPB_ENUM(GPBType_FieldNumber) {
@property(nonatomic, readwrite) BOOL hasSourceContext; @property(nonatomic, readwrite) BOOL hasSourceContext;
@property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext; @property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext;
// The source syntax.
@property(nonatomic, readwrite) GPBSyntax syntax;
@end @end
int32_t GPBType_Syntax_RawValue(GPBType *message);
void SetGPBType_Syntax_RawValue(GPBType *message, int32_t value);
#pragma mark - GPBField #pragma mark - GPBField
typedef GPB_ENUM(GPBField_FieldNumber) { typedef GPB_ENUM(GPBField_FieldNumber) {
...@@ -163,6 +188,7 @@ typedef GPB_ENUM(GPBField_FieldNumber) { ...@@ -163,6 +188,7 @@ typedef GPB_ENUM(GPBField_FieldNumber) {
GPBField_FieldNumber_OneofIndex = 7, GPBField_FieldNumber_OneofIndex = 7,
GPBField_FieldNumber_Packed = 8, GPBField_FieldNumber_Packed = 8,
GPBField_FieldNumber_OptionsArray = 9, GPBField_FieldNumber_OptionsArray = 9,
GPBField_FieldNumber_JsonName = 10,
}; };
// Field represents a single field of a message type. // Field represents a single field of a message type.
...@@ -195,6 +221,9 @@ typedef GPB_ENUM(GPBField_FieldNumber) { ...@@ -195,6 +221,9 @@ typedef GPB_ENUM(GPBField_FieldNumber) {
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *optionsArray; @property(nonatomic, readwrite, strong, null_resettable) NSMutableArray *optionsArray;
@property(nonatomic, readonly) NSUInteger optionsArray_Count; @property(nonatomic, readonly) NSUInteger optionsArray_Count;
// The JSON name for this field.
@property(nonatomic, readwrite, copy, null_resettable) NSString *jsonName;
@end @end
int32_t GPBField_Kind_RawValue(GPBField *message); int32_t GPBField_Kind_RawValue(GPBField *message);
...@@ -210,6 +239,7 @@ typedef GPB_ENUM(GPBEnum_FieldNumber) { ...@@ -210,6 +239,7 @@ typedef GPB_ENUM(GPBEnum_FieldNumber) {
GPBEnum_FieldNumber_EnumvalueArray = 2, GPBEnum_FieldNumber_EnumvalueArray = 2,
GPBEnum_FieldNumber_OptionsArray = 3, GPBEnum_FieldNumber_OptionsArray = 3,
GPBEnum_FieldNumber_SourceContext = 4, GPBEnum_FieldNumber_SourceContext = 4,
GPBEnum_FieldNumber_Syntax = 5,
}; };
// Enum type definition. // Enum type definition.
...@@ -232,8 +262,14 @@ typedef GPB_ENUM(GPBEnum_FieldNumber) { ...@@ -232,8 +262,14 @@ typedef GPB_ENUM(GPBEnum_FieldNumber) {
@property(nonatomic, readwrite) BOOL hasSourceContext; @property(nonatomic, readwrite) BOOL hasSourceContext;
@property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext; @property(nonatomic, readwrite, strong, null_resettable) GPBSourceContext *sourceContext;
// The source syntax.
@property(nonatomic, readwrite) GPBSyntax syntax;
@end @end
int32_t GPBEnum_Syntax_RawValue(GPBEnum *message);
void SetGPBEnum_Syntax_RawValue(GPBEnum *message, int32_t value);
#pragma mark - GPBEnumValue #pragma mark - GPBEnumValue
typedef GPB_ENUM(GPBEnumValue_FieldNumber) { typedef GPB_ENUM(GPBEnumValue_FieldNumber) {
......
...@@ -40,6 +40,33 @@ static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) { ...@@ -40,6 +40,33 @@ static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) {
return descriptor; return descriptor;
} }
#pragma mark - Enum GPBSyntax
GPBEnumDescriptor *GPBSyntax_EnumDescriptor(void) {
static GPBEnumDescriptor *descriptor = NULL;
if (!descriptor) {
static GPBMessageEnumValueDescription values[] = {
{ .name = "SyntaxProto2", .number = GPBSyntax_SyntaxProto2 },
{ .name = "SyntaxProto3", .number = GPBSyntax_SyntaxProto3 },
};
descriptor = [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(GPBSyntax)
values:values
valueCount:sizeof(values) / sizeof(GPBMessageEnumValueDescription)
enumVerifier:GPBSyntax_IsValidValue];
}
return descriptor;
}
BOOL GPBSyntax_IsValidValue(int32_t value__) {
switch (value__) {
case GPBSyntax_SyntaxProto2:
case GPBSyntax_SyntaxProto3:
return YES;
default:
return NO;
}
}
#pragma mark - GPBType #pragma mark - GPBType
@implementation GPBType @implementation GPBType
...@@ -49,9 +76,11 @@ static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) { ...@@ -49,9 +76,11 @@ static GPBFileDescriptor *GPBTypeRoot_FileDescriptor(void) {
@dynamic oneofsArray, oneofsArray_Count; @dynamic oneofsArray, oneofsArray_Count;
@dynamic optionsArray, optionsArray_Count; @dynamic optionsArray, optionsArray_Count;
@dynamic hasSourceContext, sourceContext; @dynamic hasSourceContext, sourceContext;
@dynamic syntax;
typedef struct GPBType__storage_ { typedef struct GPBType__storage_ {
uint32_t _has_storage_[1]; uint32_t _has_storage_[1];
GPBSyntax syntax;
NSString *name; NSString *name;
NSMutableArray *fieldsArray; NSMutableArray *fieldsArray;
NSMutableArray *oneofsArray; NSMutableArray *oneofsArray;
...@@ -120,6 +149,17 @@ typedef struct GPBType__storage_ { ...@@ -120,6 +149,17 @@ typedef struct GPBType__storage_ {
.dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext), .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
.fieldOptions = NULL, .fieldOptions = NULL,
}, },
{
.name = "syntax",
.number = GPBType_FieldNumber_Syntax,
.hasIndex = 5,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
.dataType = GPBDataTypeEnum,
.offset = offsetof(GPBType__storage_, syntax),
.defaultValue.valueEnum = GPBSyntax_SyntaxProto2,
.dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor,
.fieldOptions = NULL,
},
}; };
GPBDescriptor *localDescriptor = GPBDescriptor *localDescriptor =
[GPBDescriptor allocDescriptorForClass:[GPBType class] [GPBDescriptor allocDescriptorForClass:[GPBType class]
...@@ -143,6 +183,18 @@ typedef struct GPBType__storage_ { ...@@ -143,6 +183,18 @@ typedef struct GPBType__storage_ {
@end @end
int32_t GPBType_Syntax_RawValue(GPBType *message) {
GPBDescriptor *descriptor = [GPBType descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBType_FieldNumber_Syntax];
return GPBGetMessageInt32Field(message, field);
}
void SetGPBType_Syntax_RawValue(GPBType *message, int32_t value) {
GPBDescriptor *descriptor = [GPBType descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBType_FieldNumber_Syntax];
GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}
#pragma mark - GPBField #pragma mark - GPBField
@implementation GPBField @implementation GPBField
...@@ -155,6 +207,7 @@ typedef struct GPBType__storage_ { ...@@ -155,6 +207,7 @@ typedef struct GPBType__storage_ {
@dynamic oneofIndex; @dynamic oneofIndex;
@dynamic packed; @dynamic packed;
@dynamic optionsArray, optionsArray_Count; @dynamic optionsArray, optionsArray_Count;
@dynamic jsonName;
typedef struct GPBField__storage_ { typedef struct GPBField__storage_ {
uint32_t _has_storage_[1]; uint32_t _has_storage_[1];
...@@ -166,6 +219,7 @@ typedef struct GPBField__storage_ { ...@@ -166,6 +219,7 @@ typedef struct GPBField__storage_ {
NSString *name; NSString *name;
NSString *typeURL; NSString *typeURL;
NSMutableArray *optionsArray; NSMutableArray *optionsArray;
NSString *jsonName;
} GPBField__storage_; } GPBField__storage_;
// This method is threadsafe because it is initially called // This method is threadsafe because it is initially called
...@@ -262,6 +316,17 @@ typedef struct GPBField__storage_ { ...@@ -262,6 +316,17 @@ typedef struct GPBField__storage_ {
.dataTypeSpecific.className = GPBStringifySymbol(GPBOption), .dataTypeSpecific.className = GPBStringifySymbol(GPBOption),
.fieldOptions = NULL, .fieldOptions = NULL,
}, },
{
.name = "jsonName",
.number = GPBField_FieldNumber_JsonName,
.hasIndex = 8,
.flags = GPBFieldOptional,
.dataType = GPBDataTypeString,
.offset = offsetof(GPBField__storage_, jsonName),
.defaultValue.valueString = nil,
.dataTypeSpecific.className = NULL,
.fieldOptions = NULL,
},
}; };
static GPBMessageEnumDescription enums[] = { static GPBMessageEnumDescription enums[] = {
{ .enumDescriptorFunc = GPBField_Kind_EnumDescriptor }, { .enumDescriptorFunc = GPBField_Kind_EnumDescriptor },
...@@ -335,6 +400,7 @@ GPBEnumDescriptor *GPBField_Kind_EnumDescriptor(void) { ...@@ -335,6 +400,7 @@ GPBEnumDescriptor *GPBField_Kind_EnumDescriptor(void) {
{ .name = "TypeFixed32", .number = GPBField_Kind_TypeFixed32 }, { .name = "TypeFixed32", .number = GPBField_Kind_TypeFixed32 },
{ .name = "TypeBool", .number = GPBField_Kind_TypeBool }, { .name = "TypeBool", .number = GPBField_Kind_TypeBool },
{ .name = "TypeString", .number = GPBField_Kind_TypeString }, { .name = "TypeString", .number = GPBField_Kind_TypeString },
{ .name = "TypeGroup", .number = GPBField_Kind_TypeGroup },
{ .name = "TypeMessage", .number = GPBField_Kind_TypeMessage }, { .name = "TypeMessage", .number = GPBField_Kind_TypeMessage },
{ .name = "TypeBytes", .number = GPBField_Kind_TypeBytes }, { .name = "TypeBytes", .number = GPBField_Kind_TypeBytes },
{ .name = "TypeUint32", .number = GPBField_Kind_TypeUint32 }, { .name = "TypeUint32", .number = GPBField_Kind_TypeUint32 },
...@@ -364,6 +430,7 @@ BOOL GPBField_Kind_IsValidValue(int32_t value__) { ...@@ -364,6 +430,7 @@ BOOL GPBField_Kind_IsValidValue(int32_t value__) {
case GPBField_Kind_TypeFixed32: case GPBField_Kind_TypeFixed32:
case GPBField_Kind_TypeBool: case GPBField_Kind_TypeBool:
case GPBField_Kind_TypeString: case GPBField_Kind_TypeString:
case GPBField_Kind_TypeGroup:
case GPBField_Kind_TypeMessage: case GPBField_Kind_TypeMessage:
case GPBField_Kind_TypeBytes: case GPBField_Kind_TypeBytes:
case GPBField_Kind_TypeUint32: case GPBField_Kind_TypeUint32:
...@@ -417,9 +484,11 @@ BOOL GPBField_Cardinality_IsValidValue(int32_t value__) { ...@@ -417,9 +484,11 @@ BOOL GPBField_Cardinality_IsValidValue(int32_t value__) {
@dynamic enumvalueArray, enumvalueArray_Count; @dynamic enumvalueArray, enumvalueArray_Count;
@dynamic optionsArray, optionsArray_Count; @dynamic optionsArray, optionsArray_Count;
@dynamic hasSourceContext, sourceContext; @dynamic hasSourceContext, sourceContext;
@dynamic syntax;
typedef struct GPBEnum__storage_ { typedef struct GPBEnum__storage_ {
uint32_t _has_storage_[1]; uint32_t _has_storage_[1];
GPBSyntax syntax;
NSString *name; NSString *name;
NSMutableArray *enumvalueArray; NSMutableArray *enumvalueArray;
NSMutableArray *optionsArray; NSMutableArray *optionsArray;
...@@ -476,6 +545,17 @@ typedef struct GPBEnum__storage_ { ...@@ -476,6 +545,17 @@ typedef struct GPBEnum__storage_ {
.dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext), .dataTypeSpecific.className = GPBStringifySymbol(GPBSourceContext),
.fieldOptions = NULL, .fieldOptions = NULL,
}, },
{
.name = "syntax",
.number = GPBEnum_FieldNumber_Syntax,
.hasIndex = 4,
.flags = GPBFieldOptional | GPBFieldHasEnumDescriptor,
.dataType = GPBDataTypeEnum,
.offset = offsetof(GPBEnum__storage_, syntax),
.defaultValue.valueEnum = GPBSyntax_SyntaxProto2,
.dataTypeSpecific.enumDescFunc = GPBSyntax_EnumDescriptor,
.fieldOptions = NULL,
},
}; };
GPBDescriptor *localDescriptor = GPBDescriptor *localDescriptor =
[GPBDescriptor allocDescriptorForClass:[GPBEnum class] [GPBDescriptor allocDescriptorForClass:[GPBEnum class]
...@@ -499,6 +579,18 @@ typedef struct GPBEnum__storage_ { ...@@ -499,6 +579,18 @@ typedef struct GPBEnum__storage_ {
@end @end
int32_t GPBEnum_Syntax_RawValue(GPBEnum *message) {
GPBDescriptor *descriptor = [GPBEnum descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBEnum_FieldNumber_Syntax];
return GPBGetMessageInt32Field(message, field);
}
void SetGPBEnum_Syntax_RawValue(GPBEnum *message, int32_t value) {
GPBDescriptor *descriptor = [GPBEnum descriptor];
GPBFieldDescriptor *field = [descriptor fieldWithNumber:GPBEnum_FieldNumber_Syntax];
GPBSetInt32IvarWithFieldInternal(message, field, value, descriptor.file.syntax);
}
#pragma mark - GPBEnumValue #pragma mark - GPBEnumValue
@implementation GPBEnumValue @implementation GPBEnumValue
......
...@@ -30,7 +30,9 @@ typedef GPB_ENUM(GPBDoubleValue_FieldNumber) { ...@@ -30,7 +30,9 @@ typedef GPB_ENUM(GPBDoubleValue_FieldNumber) {
GPBDoubleValue_FieldNumber_Value = 1, GPBDoubleValue_FieldNumber_Value = 1,
}; };
// Wrapper message for double. // Wrapper message for `double`.
//
// The JSON representation for `DoubleValue` is JSON number.
@interface GPBDoubleValue : GPBMessage @interface GPBDoubleValue : GPBMessage
// The double value. // The double value.
...@@ -44,7 +46,9 @@ typedef GPB_ENUM(GPBFloatValue_FieldNumber) { ...@@ -44,7 +46,9 @@ typedef GPB_ENUM(GPBFloatValue_FieldNumber) {
GPBFloatValue_FieldNumber_Value = 1, GPBFloatValue_FieldNumber_Value = 1,
}; };
// Wrapper message for float. // Wrapper message for `float`.
//
// The JSON representation for `FloatValue` is JSON number.
@interface GPBFloatValue : GPBMessage @interface GPBFloatValue : GPBMessage
// The float value. // The float value.
...@@ -58,7 +62,9 @@ typedef GPB_ENUM(GPBInt64Value_FieldNumber) { ...@@ -58,7 +62,9 @@ typedef GPB_ENUM(GPBInt64Value_FieldNumber) {
GPBInt64Value_FieldNumber_Value = 1, GPBInt64Value_FieldNumber_Value = 1,
}; };
// Wrapper message for int64. // Wrapper message for `int64`.
//
// The JSON representation for `Int64Value` is JSON string.
@interface GPBInt64Value : GPBMessage @interface GPBInt64Value : GPBMessage
// The int64 value. // The int64 value.
...@@ -72,7 +78,9 @@ typedef GPB_ENUM(GPBUInt64Value_FieldNumber) { ...@@ -72,7 +78,9 @@ typedef GPB_ENUM(GPBUInt64Value_FieldNumber) {
GPBUInt64Value_FieldNumber_Value = 1, GPBUInt64Value_FieldNumber_Value = 1,
}; };
// Wrapper message for uint64. // Wrapper message for `uint64`.
//
// The JSON representation for `UInt64Value` is JSON string.
@interface GPBUInt64Value : GPBMessage @interface GPBUInt64Value : GPBMessage
// The uint64 value. // The uint64 value.
...@@ -86,7 +94,9 @@ typedef GPB_ENUM(GPBInt32Value_FieldNumber) { ...@@ -86,7 +94,9 @@ typedef GPB_ENUM(GPBInt32Value_FieldNumber) {
GPBInt32Value_FieldNumber_Value = 1, GPBInt32Value_FieldNumber_Value = 1,
}; };
// Wrapper message for int32. // Wrapper message for `int32`.
//
// The JSON representation for `Int32Value` is JSON number.
@interface GPBInt32Value : GPBMessage @interface GPBInt32Value : GPBMessage
// The int32 value. // The int32 value.
...@@ -100,7 +110,9 @@ typedef GPB_ENUM(GPBUInt32Value_FieldNumber) { ...@@ -100,7 +110,9 @@ typedef GPB_ENUM(GPBUInt32Value_FieldNumber) {
GPBUInt32Value_FieldNumber_Value = 1, GPBUInt32Value_FieldNumber_Value = 1,
}; };
// Wrapper message for uint32. // Wrapper message for `uint32`.
//
// The JSON representation for `UInt32Value` is JSON number.
@interface GPBUInt32Value : GPBMessage @interface GPBUInt32Value : GPBMessage
// The uint32 value. // The uint32 value.
...@@ -114,7 +126,9 @@ typedef GPB_ENUM(GPBBoolValue_FieldNumber) { ...@@ -114,7 +126,9 @@ typedef GPB_ENUM(GPBBoolValue_FieldNumber) {
GPBBoolValue_FieldNumber_Value = 1, GPBBoolValue_FieldNumber_Value = 1,
}; };
// Wrapper message for bool. // Wrapper message for `bool`.
//
// The JSON representation for `BoolValue` is JSON `true` and `false`.
@interface GPBBoolValue : GPBMessage @interface GPBBoolValue : GPBMessage
// The bool value. // The bool value.
...@@ -128,7 +142,9 @@ typedef GPB_ENUM(GPBStringValue_FieldNumber) { ...@@ -128,7 +142,9 @@ typedef GPB_ENUM(GPBStringValue_FieldNumber) {
GPBStringValue_FieldNumber_Value = 1, GPBStringValue_FieldNumber_Value = 1,
}; };
// Wrapper message for string. // Wrapper message for `string`.
//
// The JSON representation for `StringValue` is JSON string.
@interface GPBStringValue : GPBMessage @interface GPBStringValue : GPBMessage
// The string value. // The string value.
...@@ -142,7 +158,9 @@ typedef GPB_ENUM(GPBBytesValue_FieldNumber) { ...@@ -142,7 +158,9 @@ typedef GPB_ENUM(GPBBytesValue_FieldNumber) {
GPBBytesValue_FieldNumber_Value = 1, GPBBytesValue_FieldNumber_Value = 1,
}; };
// Wrapper message for bytes. // Wrapper message for `bytes`.
//
// The JSON representation for `BytesValue` is JSON string.
@interface GPBBytesValue : GPBMessage @interface GPBBytesValue : GPBMessage
// The bytes value. // The bytes value.
......
...@@ -44,6 +44,7 @@ option cc_generic_services = true; // auto-added ...@@ -44,6 +44,7 @@ option cc_generic_services = true; // auto-added
option java_generic_services = true; // auto-added option java_generic_services = true; // auto-added
option py_generic_services = true; // auto-added option py_generic_services = true; // auto-added
option cc_enable_arenas = false; option cc_enable_arenas = false;
option objc_class_prefix = "NOARN";
import "google/protobuf/unittest_import.proto"; import "google/protobuf/unittest_import.proto";
import "google/protobuf/unittest_arena.proto"; import "google/protobuf/unittest_arena.proto";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment