diff options
Diffstat (limited to 'csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs')
-rw-r--r-- | csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs b/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs new file mode 100644 index 00000000..efc3fa4c --- /dev/null +++ b/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs @@ -0,0 +1,55 @@ +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors { + /// <summary> + /// Describes a single method in a service. + /// </summary> + public class MethodDescriptor : IndexedDescriptorBase<MethodDescriptorProto, MethodOptions> { + + private readonly ServiceDescriptor service; + private MessageDescriptor inputType; + private MessageDescriptor outputType; + + /// <value> + /// The service this method belongs to. + /// </value> + public ServiceDescriptor Service { + get { return service; } + } + + /// <value> + /// The method's input type. + /// </value> + public MessageDescriptor InputType { + get { return inputType; } + } + + /// <value> + /// The method's input type. + /// </value> + public MessageDescriptor OutputType { + get { return inputType; } + } + + internal MethodDescriptor(MethodDescriptorProto proto, FileDescriptor file, + ServiceDescriptor parent, int index) + : base(proto, file, parent.FullName + "." + proto.Name, index) { + service = parent; + file.DescriptorPool.AddSymbol(this); + } + + internal void CrossLink() { + IDescriptor lookup = File.DescriptorPool.LookupSymbol(Proto.InputType, this); + if (!(lookup is MessageDescriptor)) { + throw new DescriptorValidationException(this, "\"" + Proto.InputType + "\" is not a message type."); + } + inputType = (MessageDescriptor) lookup; + + lookup = File.DescriptorPool.LookupSymbol(Proto.OutputType, this); + if (!(lookup is MessageDescriptor)) { + throw new DescriptorValidationException(this, "\"" + Proto.OutputType + "\" is not a message type."); + } + outputType = (MessageDescriptor) lookup; + } + } +} |