From 37ca94f8aed073b70e3d0fae3aab33eac35e3fec Mon Sep 17 00:00:00 2001 From: Dimitris Koutsogiorgas Date: Fri, 24 Jun 2016 17:40:29 -0700 Subject: Get value from text format name in GPBEnumDescriptor --- objectivec/GPBDescriptor.h | 1 + objectivec/GPBDescriptor.m | 17 +++++++++++++++++ objectivec/Tests/GPBDescriptorTests.m | 8 ++++++++ 3 files changed, 26 insertions(+) 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 { -- cgit v1.2.3