aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitris Koutsogiorgas <dimitris@squareup.com>2016-06-24 17:40:29 -0700
committerDimitris Koutsogiorgas <dimitris@squareup.com>2016-06-26 10:38:58 -0700
commit37ca94f8aed073b70e3d0fae3aab33eac35e3fec (patch)
treef7142f28f46a9c8d85ce7f42db72f8de4a78db13
parent325cc42e98b24d8a3a62f3d72a6e1ffdd5ab8ef4 (diff)
downloadprotobuf-37ca94f8aed073b70e3d0fae3aab33eac35e3fec.tar.gz
protobuf-37ca94f8aed073b70e3d0fae3aab33eac35e3fec.tar.bz2
protobuf-37ca94f8aed073b70e3d0fae3aab33eac35e3fec.zip
Get value from text format name in GPBEnumDescriptor
-rw-r--r--objectivec/GPBDescriptor.h1
-rw-r--r--objectivec/GPBDescriptor.m17
-rw-r--r--objectivec/Tests/GPBDescriptorTests.m8
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 {