public void MessageDescriptor() { MessageDescriptor messageType = TestAllTypes.Descriptor; MessageDescriptor nestedType = TestAllTypes.Types.NestedMessage.Descriptor; Assert.AreEqual("TestAllTypes", messageType.Name); Assert.AreEqual("protobuf_unittest3.TestAllTypes", messageType.FullName); Assert.AreEqual(UnittestProto3Reflection.Descriptor, messageType.File); Assert.IsNull(messageType.ContainingType); Assert.IsNull(messageType.Proto.Options); Assert.AreEqual("TestAllTypes", messageType.Name); Assert.AreEqual("NestedMessage", nestedType.Name); Assert.AreEqual("protobuf_unittest3.TestAllTypes.NestedMessage", nestedType.FullName); Assert.AreEqual(UnittestProto3Reflection.Descriptor, nestedType.File); Assert.AreEqual(messageType, nestedType.ContainingType); FieldDescriptor field = messageType.Fields.InDeclarationOrder()[0]; Assert.AreEqual("single_int32", field.Name); Assert.AreEqual(field, messageType.FindDescriptor <FieldDescriptor>("single_int32")); Assert.Null(messageType.FindDescriptor <FieldDescriptor>("no_such_field")); Assert.AreEqual(field, messageType.FindFieldByNumber(1)); Assert.Null(messageType.FindFieldByNumber(571283)); var fieldsInDeclarationOrder = messageType.Fields.InDeclarationOrder(); for (int i = 0; i < fieldsInDeclarationOrder.Count; i++) { Assert.AreEqual(i, fieldsInDeclarationOrder[i].Index); } Assert.AreEqual(nestedType, messageType.NestedTypes[0]); Assert.AreEqual(nestedType, messageType.FindDescriptor <MessageDescriptor>("NestedMessage")); Assert.Null(messageType.FindDescriptor <MessageDescriptor>("NoSuchType")); for (int i = 0; i < messageType.NestedTypes.Count; i++) { Assert.AreEqual(i, messageType.NestedTypes[i].Index); } Assert.AreEqual(messageType.EnumTypes[0], messageType.FindDescriptor <EnumDescriptor>("NestedEnum")); Assert.Null(messageType.FindDescriptor <EnumDescriptor>("NoSuchType")); for (int i = 0; i < messageType.EnumTypes.Count; i++) { Assert.AreEqual(i, messageType.EnumTypes[i].Index); } TestDescriptorToProto(messageType.ToProto, messageType.Proto); }
/// <summary> /// Retrieves the descriptor for the field with the given number. /// </summary> /// <param name="number">Number of the field to retrieve the descriptor for</param> /// <returns>The accessor for the given field</returns> /// <exception cref="KeyNotFoundException">The message descriptor does not contain a field /// with the given number</exception> public FieldDescriptor this[int number] { get { var fieldDescriptor = messageDescriptor.FindFieldByNumber(number); if (fieldDescriptor == null) { throw new KeyNotFoundException("No such field number"); } return(fieldDescriptor); } }