class Protobuf::Visitor::CreateDescriptorVisitor
def add_option(name, value)
def add_option(name, value) options = case current_descriptor when Google::Protobuf::FileDescriptorProto then Google::Protobuf::FileOptions.new when Google::Protobuf::DescriptorProto then Google::Protobuf::MessageOptions.new when Google::Protobuf::FieldDescriptorProto then Google::Protobuf::FieldOptions.new when Google::Protobuf::EnumDescriptorProto then Google::Protobuf::EnumOptions.new when Google::Protobuf::EnumValueDescriptorProto then Google::Protobuf::EnumValueOptions.new when Google::Protobuf::ServiceDescriptorProto then Google::Protobuf::ServiceOptions.new when Google::Protobuf::MethodDescriptorProto then Google::Protobuf::MethodOptions.new else raise ArgumentError, 'Invalid context' end #TODO how should options be handled? #current_descriptor.options << option end
def current_descriptor
def current_descriptor @context.last end
def descriptor=(descriptor)
def descriptor=(descriptor) case current_descriptor when Google::Protobuf::FileDescriptorProto then current_descriptor.message_type << descriptor when Google::Protobuf::DescriptorProto then current_descriptor.nested_type << descriptor else raise ArgumentError, 'Invalid context' end end
def enum_descriptor=(descriptor)
def enum_descriptor=(descriptor) current_descriptor.enum_type << descriptor end
def enum_value_descriptor=(descriptor)
def enum_value_descriptor=(descriptor) current_descriptor.value << descriptor end
def extension_range_descriptor=(descriptor)
def extension_range_descriptor=(descriptor) current_descriptor.extension_range << descriptor end
def field_descriptor=(descriptor)
def field_descriptor=(descriptor) case current_descriptor when Google::Protobuf::FileDescriptorProto then current_descriptor.extension << descriptor when Google::Protobuf::DescriptorProto then current_descriptor.field << descriptor #TODO: how should i distiguish between field and extension #current_descriptor.extension << descriptor else raise ArgumentError, 'Invalid context' end end
def file_descriptor=(descriptor)
def file_descriptor=(descriptor) @file_descriptor = descriptor @file_descriptor.name = @filename end
def in_context(descriptor, &block)
def in_context(descriptor, &block) @context.push descriptor block.call @context.pop end
def initialize(filename=nil)
def initialize(filename=nil) @context = [] @filename = filename end
def method_descriptor=(descriptor)
def method_descriptor=(descriptor) current_descriptor.method << descriptor end
def service_descriptor=(descriptor)
def service_descriptor=(descriptor) current_descriptor.service << descriptor end
def visit(node)
def visit(node) node.accept_descriptor_visitor(self) self end