diff options
author | Thomas Van Lenten <thomasvl@google.com> | 2016-06-26 21:09:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-26 21:09:40 -0400 |
commit | 2bcd43afe4b649c95d932daf31b0b83948f7cf7c (patch) | |
tree | e848450d087512ec38d067d5772327b3e7883b68 | |
parent | 0ab78e19eb56fb992105eba034f3b63fd67b4ae5 (diff) | |
parent | 37ca94f8aed073b70e3d0fae3aab33eac35e3fec (diff) | |
download | protobuf-2bcd43afe4b649c95d932daf31b0b83948f7cf7c.tar.gz protobuf-2bcd43afe4b649c95d932daf31b0b83948f7cf7c.tar.bz2 protobuf-2bcd43afe4b649c95d932daf31b0b83948f7cf7c.zip |
Merge pull request #1714 from dnkoutso/master
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 c0f644c7..fe4ff390 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 d27d6892..0212fb0d 100644 --- a/objectivec/GPBDescriptor.m +++ b/objectivec/GPBDescriptor.m @@ -756,6 +756,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 { |