{
  "syntax": 3,
  "package": null,
  "imports": [
    "google/protobuf/descriptor.proto"
  ],
  "enums": [
    {
      "name": "MyEnum",
      "values": {
        "FOO": {
          "value": 1,
          "options": {
            "my_enum_value_option": "321"
          }
        },
        "BAR": {
          "value": 2,
          "options": {}
        }
      },
      "options": {
        "my_enum_option": true
      }
    }
  ],
  "messages": [
    {
      "name": "MyMessage",
      "enums": [],
      "extends": [],
      "messages": [],
      "options": {
        "my_message_option": "1234"
      },
      "fields": [
        {
          "name": "foo",
          "type": "int32",
          "tag": 1,
          "map": null,
          "oneof": null,
          "required": false,
          "repeated": false,
          "options": {
            "my_field_option": "4.5"
          }
        },
        {
          "name": "bar",
          "type": "string",
          "tag": 2,
          "map": null,
          "oneof": null,
          "required": false,
          "repeated": false,
          "options": {}
        }
      ],
      "extensions": null
    },
    {
      "name": "RequestType",
      "enums": [],
      "extends": [],
      "messages": [],
      "options": {},
      "fields": [],
      "extensions": null
    },
    {
      "name": "ResponseType",
      "enums": [],
      "extends": [],
      "options": {},
      "messages": [],
      "fields": [],
      "extensions": null
    },
    {
      "name": "FooOptions",
      "enums": [],
      "extends": [],
      "options": {},
      "messages": [],
      "fields": [
        {
          "name": "opt1",
          "type": "int32",
          "tag": 1,
          "map": null,
          "oneof": null,
          "required": false,
          "repeated": false,
          "options": {}
        },
        {
          "name": "opt2",
          "type": "string",
          "tag": 2,
          "map": null,
          "oneof": null,
          "required": false,
          "repeated": false,
          "options": {}
        }
      ],
      "extensions": null
    },
    {
      "name": "Bar",
      "enums": [],
      "extends": [],
      "options": {},
      "messages": [],
      "fields": [
        {
          "name": "a",
          "type": "int32",
          "tag": 1,
          "map": null,
          "oneof": null,
          "required": false,
          "repeated": false,
          "options": {
            "foo_options": {
              "opt1": "123",
              "opt2": "\"baz\""
            }
          }
        },
        {
          "name": "b",
          "type": "int32",
          "tag": 2,
          "map": null,
          "oneof": null,
          "required": false,
          "repeated": false,
          "options": {
            "foo_options": {
              "opt1": "123",
              "opt2": "\"baz\""
            }
          }
        }
      ],
      "extensions": null
    }
  ],
  "options": {
    "my_file_option": "Hello world!"
  },
  "extends": [
    {
      "name": "google.protobuf.FileOptions",
      "message": {
        "name": "google.protobuf.FileOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_file_option",
            "type": "string",
            "tag": 50000,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.MessageOptions",
      "message": {
        "name": "google.protobuf.MessageOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_message_option",
            "type": "int32",
            "tag": 50001,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.FieldOptions",
      "message": {
        "name": "google.protobuf.FieldOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_field_option",
            "type": "float",
            "tag": 50002,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.EnumOptions",
      "message": {
        "name": "google.protobuf.EnumOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_enum_option",
            "type": "bool",
            "tag": 50003,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.EnumValueOptions",
      "message": {
        "name": "google.protobuf.EnumValueOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_enum_value_option",
            "type": "uint32",
            "tag": 50004,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.ServiceOptions",
      "message": {
        "name": "google.protobuf.ServiceOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_service_option",
            "type": "MyEnum",
            "tag": 50005,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.MethodOptions",
      "message": {
        "name": "google.protobuf.MethodOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "my_method_option",
            "type": "MyMessage",
            "tag": 50006,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    },
    {
      "name": "google.protobuf.FieldOptions",
      "message": {
        "name": "google.protobuf.FieldOptions",
        "enums": [],
        "extends": [],
        "messages": [],
        "options": {},
        "fields": [
          {
            "name": "foo_options",
            "type": "FooOptions",
            "tag": 1234,
            "map": null,
            "oneof": null,
            "required": false,
            "repeated": false,
            "options": {}
          }
        ],
        "extensions": null
      }
    }
  ],
  "services": [
    {
      "name": "MyService",
      "methods": [
        {
          "name": "MyMethod",
          "input_type": "RequestType",
          "output_type": "ResponseType",
          "client_streaming": false,
          "server_streaming": false,
          "options": {
            "my_method_option.foo": "567",
            "my_method_option.bar": "Some string"
          }
        }
      ],
      "options": {
        "my_service_option": "FOO",
        "my_service_option_map": {
          "foo": "bar"
        }
      }
    }
  ]
}
