diff options
author | Dimitris Koutsogiorgas <dimitris@squareup.com> | 2016-06-24 17:40:29 -0700 |
---|---|---|
committer | Dimitris Koutsogiorgas <dimitris@squareup.com> | 2016-06-26 10:38:58 -0700 |
commit | 37ca94f8aed073b70e3d0fae3aab33eac35e3fec (patch) | |
tree | f7142f28f46a9c8d85ce7f42db72f8de4a78db13 | |
parent | 325cc42e98b24d8a3a62f3d72a6e1ffdd5ab8ef4 (diff) | |
download | protobuf-37ca94f8aed073b70e3d0fae3aab33eac35e3fec.tar.gz protobuf-37ca94f8aed073b70e3d0fae3aab33eac35e3fec.tar.bz2 protobuf-37ca94f8aed073b70e3d0fae3aab33eac35e3fec.zip |
Get value from text format name in GPBEnumDescriptor
-rw-r--r-- | objectivec/GPBDescriptor.h | 1 | ||||
-rw-r--r-- | objectivec/GPBDescriptor.m | 17 | ||||
-rw-r--r-- | objectivec/Tests/GPBDescriptorTests.m | 8 |
3 files changed, 26 insertions, 0 deletions
diff --git a/objectivec/GPBDescriptor.h b/objectivec/GPBDescriptor.h index a6eff0fb..0c4875c6 100644 --- a/objectivec/GPBDescriptor.h +++ b/objectivec/GPBDescriptor.h @@ -123,6 +123,7 @@ typedef NS_ENUM(uint8_t, GPBFieldType) { - (BOOL)getValue:(nullable int32_t *)outValue forEnumName:(NSString *)name; - (nullable NSString *)textFormatNameForValue:(int32_t)number; +- (BOOL)getValue:(nullable int32_t *)outValue forEnumTextFormatName:(NSString *)textFormatName; @end diff --git a/objectivec/GPBDescriptor.m b/objectivec/GPBDescriptor.m index 2709737c..90636d3d 100644 --- a/objectivec/GPBDescriptor.m +++ b/objectivec/GPBDescriptor.m @@ -745,6 +745,23 @@ uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self) { return NO; } +- (BOOL)getValue:(int32_t *)outValue forEnumTextFormatName:(NSString *)textFormatName; +{ + if (nameOffsets_ == NULL) [self calcValueNameOffsets]; + + for (uint32_t i = 0; i < valueCount_; ++i) { + int32_t value = values_[i]; + NSString *valueTextFormatName = [self textFormatNameForValue:value]; + if ([valueTextFormatName isEqual:textFormatName]) { + if (outValue) { + *outValue = value; + } + return YES; + } + } + return NO; +} + - (NSString *)textFormatNameForValue:(int32_t)number { if (nameOffsets_ == NULL) [self calcValueNameOffsets]; diff --git a/objectivec/Tests/GPBDescriptorTests.m b/objectivec/Tests/GPBDescriptorTests.m index a1923c9c..74e3172b 100644 --- a/objectivec/Tests/GPBDescriptorTests.m +++ b/objectivec/Tests/GPBDescriptorTests.m @@ -125,6 +125,12 @@ [descriptor getValue:&value forEnumName:@"TestAllTypes_NestedEnum_Baz"]); XCTAssertEqual(value, TestAllTypes_NestedEnum_Baz); + // TextFormat + enumName = [descriptor textFormatNameForValue:1]; + XCTAssertNotNil(enumName); + XCTAssertTrue([descriptor getValue:&value forEnumTextFormatName:@"FOO"]); + XCTAssertEqual(value, TestAllTypes_NestedEnum_Foo); + // Bad values enumName = [descriptor enumNameForValue:0]; XCTAssertNil(enumName); @@ -134,6 +140,8 @@ forEnumName:@"TestAllTypes_NestedEnum_Unknown"]); XCTAssertFalse([descriptor getValue:NULL forEnumName:@"TestAllTypes_NestedEnum_Unknown"]); + XCTAssertFalse([descriptor getValue:NULL forEnumTextFormatName:@"Unknown"]); + XCTAssertFalse([descriptor getValue:&value forEnumTextFormatName:@"Unknown"]); } - (void)testEnumValueValidator { |