{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/buf-gen-yaml/latest.json",
  "title": "buf.gen.yaml",
  "description": "buf.gen.yaml is a configuration file used by the buf generate command to generate integration code for the languages of your choice.",
  "x-lintel": {
    "source": "https://www.schemastore.org/buf.gen.json",
    "sourceSha256": "2e7e8a94fe51db3ec1dea49d73ae73a81ebe4f6df4e78fde8d4d27afa6cfd120",
    "fileMatch": [
      "buf.gen.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "version": {
      "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#version",
      "description": "Required. Defines the current configuration version. Accepted values are `v2`, `v1`, or `v1beta1`.",
      "type": "string",
      "enum": [
        "v2",
        "v1",
        "v1beta1"
      ]
    }
  },
  "if": {
    "properties": {
      "version": {
        "const": "v1"
      }
    }
  },
  "else": {
    "$comment": "v2 properties",
    "properties": {
      "clean": {
        "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#clean",
        "description": "Optional. When set to true, buf generate deletes all directories, zip files, and/or jar files specified by the out field for each plugin before running code generation.",
        "type": "boolean",
        "default": false
      },
      "managed": {
        "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#managed",
        "description": "The managed key is used to enable managed mode, an advanced feature that allows you to specify Protobuf file and field options without defining them in the Protobuf files. See Managed mode for details about default behavior and accepted values for each available option key.",
        "type": "object",
        "minProperties": 1,
        "properties": {
          "enabled": {
            "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#enabled",
            "description": "Required if any other managed keys are set. Default is false. If a file or field option has no default, then managed mode doesn't modify that option and will only modify it if an override rule is specified.",
            "type": "boolean",
            "default": false
          },
          "disable": {
            "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#disable",
            "description": "Optional. Allows you to granularly disable managed mode for either file options or field options by specifying a list of rules. There are two types of rules: file option or field option. For both types of disable rules, you can set any combination of keys and the union is used to determine the combination of file and field options that managed mode doesn't modify. A disable rule must have at least one key set.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "module": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "file_option": {
                  "type": "string"
                },
                "field_option": {
                  "type": "string"
                },
                "field": {
                  "type": "string"
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            }
          },
          "override": {
            "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#override",
            "description": "Optional. Allows you to granularly override the file and field options that managed mode handles. Similar to disable rules, there are two types of override rules: field option or file option. For each override rule, you must provide an option and a valid value based on the option. You can then choose to set a path and/or module to filter the files that the override rule applies to. The rules will be applied instead of managed mode's default behavior, unless an option or file has an applicable disable rule.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "file_option": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "module": {
                  "type": "string"
                },
                "field_option": {
                  "type": "string"
                },
                "field": {
                  "type": "string"
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            }
          }
        },
        "additionalProperties": false
      },
      "plugins": {
        "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#plugins",
        "description": "Required. Each entry in the plugins key is a protoc plugin configuration. Plugins are invoked in parallel and their outputs are written in the order you specify here.",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "remote": {
              "description": "Indicates a remote plugin hosted on either the public BSR or a private BSR. Its value must be in the form of <REMOTE>/<ORGANIZATION>/<PLUGIN>.",
              "type": "string"
            },
            "revision": {
              "description": "The revision of the remote plugin. Only valid when specified with the `remote` key.",
              "type": "integer",
              "minimum": 1
            },
            "protoc_builtin": {
              "description": "Only applies to the code generators that are built into protoc. The following values for this field result in invoking protoc instead of a dedicated plugin binary. If you specify this type of plugin, you must also provide the protoc_path value as a string.",
              "type": "string"
            },
            "protoc_path": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "local": {
              "description": "A string or list of strings that point to the names of plugin binaries on your ${PATH}, or to its relative or absolute location on disk. If you specify a list of strings, the first is the local name, and the subsequent strings are considered arguments passed to the binary.",
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "out": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#out",
              "description": "Required. Controls where the generated files are deposited for a given plugin. Although absolute paths are supported, this configuration is typically a relative output directory to where buf generate is run.",
              "type": "string"
            },
            "opt": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#opt",
              "description": "Optional. Specifies one or more plugin options for a plugin. You can provide options as either a single string or a list of strings.",
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "strategy": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#strategy",
              "description": "Optional. Specifies the invocation strategy to use.",
              "type": "string",
              "enum": [
                "directory",
                "all"
              ]
            },
            "include_imports": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#include_imports",
              "description": "Optional. Generates all imports except for Well-Known Types. This setting works the same as the --include-imports flag on buf generate—if they conflict with each other, the flag gets precedence.",
              "type": "boolean"
            },
            "include_wkt": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#include_wkt",
              "description": "Optional. Generates Well-Known Types. Can't be set without --include-imports. This setting works the same as the --include-wkt flag on buf generate—if they conflict with each other, the flag gets precedence.",
              "type": "boolean"
            },
            "types": {
              "$ref": "#/$defs/types"
            },
            "exclude_types": {
              "$ref": "#/$defs/exclude_types"
            }
          },
          "minProperties": 1,
          "required": [
            "out"
          ],
          "additionalProperties": false
        }
      },
      "inputs": {
        "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml#inputs",
        "description": "Optional. A list of inputs to generate code for.",
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "directory": {
                  "description": "Specifies a local directory path as the input, with the location as the value. The path should be a valid module or workspace root, or a directory of Protobuf files. The path can be relative to the workspace or absolute.",
                  "type": "string"
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "module": {
                  "description": "Specifies a remote BSR module as the input, with the location as the value. A commit or label can also be specified.",
                  "type": "string",
                  "examples": [
                    "buf.build/acme/weather",
                    "buf.build/acme/weather:main",
                    "buf.build/acme/weather:7abdb7802c8f4737a1a23a35ca8266ef"
                  ]
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "git_repo": {
                  "description": "Specifies a Git repo as the input, with the location as the key value. The path to the Git repository can be either a local .git directory or a remote location (http/https/ssh/git). Note that remote <http://>, <https://>, ssh://, and git:// locations must be prefixed with their scheme.",
                  "type": "string"
                },
                "branch": {
                  "description": "Use a specific branch of the repo as the input.",
                  "type": "string"
                },
                "tag": {
                  "description": "Use a specific commit or tag in the repo as the input.",
                  "type": "string"
                },
                "ref": {
                  "description": "Use an explicit reference in the repo as the input. Any valid input to git checkout is accepted, but most Git hosts (including GitHub) only allow fetching by reference and not commits by sha. Use git ls-remote --refs to get a list of available references and their corresponding commits.",
                  "type": "string"
                },
                "subdir": {
                  "description": "Use a specific subdirectory of the repo as the base directory of the input",
                  "type": "string"
                },
                "depth": {
                  "description": "Specifies how deep within the repo to generate. Defaults to 50 if ref is specified.",
                  "type": "integer",
                  "minimum": 1
                },
                "recurse_subdirectories": {
                  "description": "Controls whether to generate for modules recursively.",
                  "type": "boolean"
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "tarball": {
                  "description": "Specifies a local or remote (http/https) tarball, with the location as the value. When generating, strip_components is applied before subdir.",
                  "type": "string"
                },
                "strip_components": {
                  "description": "Reads at the relative path and strips some number of components.",
                  "type": "integer"
                },
                "subdir": {
                  "description": "Reads at the relative path and uses the subdirectory specified within the archive as the base directory.",
                  "type": "string"
                },
                "compression": {
                  "description": "Compression is automatically detected if the file extension is .tgz, .tar.gz, or .tar.zst but can be manually specified here.",
                  "type": "string",
                  "enum": [
                    "gzip",
                    "zstd"
                  ]
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "zip_archive": {
                  "description": "Specifies a local or remote (http/https) zip archive, with the location as the value. When generating, strip_components is applied before subdir.",
                  "type": "string"
                },
                "strip_components": {
                  "description": "Reads at the relative path and strips some number of components.",
                  "type": "integer"
                },
                "subdir": {
                  "description": "Reads at the relative path and uses the subdirectory specified within the archive as the base directory.",
                  "type": "string"
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string"
                  }
                },
                "exclude_types": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string"
                  }
                },
                "paths": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string"
                  }
                },
                "exclude_paths": {
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "string"
                  }
                },
                "proto_file": {
                  "description": "Specifies a single .proto file as the input, with the location as the value. The path can be relative to the workspace or absolute.",
                  "type": "string"
                },
                "include_package_files": {
                  "description": "Include all other files in the package and their imports for the specified .proto file.",
                  "type": "boolean"
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "binary_image": {
                  "description": "Specifies a Buf image in binary format as the input, with the location as the value.",
                  "type": "string"
                },
                "compression": {
                  "description": "Compression is automatically detected if the file extension is .gz or .zst but can be manually specified here.",
                  "type": "string",
                  "enum": [
                    "gzip",
                    "zstd"
                  ]
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "json_image": {
                  "description": "Specifies a Buf image in JSON format as the input, with the location as the value.",
                  "type": "string"
                },
                "compression": {
                  "description": "Compression is automatically detected if the file extension is .gz or .zst but can be manually specified here.",
                  "type": "string",
                  "enum": [
                    "gzip",
                    "zstd"
                  ]
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "yaml_image": {
                  "description": "Specifies a Buf image in YAML format as the input, with the location as the value.",
                  "type": "string"
                },
                "compression": {
                  "description": "Compression is automatically detected if the file extension is .gz or .zst but can be manually specified here.",
                  "type": "string",
                  "enum": [
                    "gzip",
                    "zstd"
                  ]
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "types": {
                  "$ref": "#/$defs/types"
                },
                "exclude_types": {
                  "$ref": "#/$defs/exclude_types"
                },
                "paths": {
                  "$ref": "#/$defs/paths"
                },
                "exclude_paths": {
                  "$ref": "#/$defs/exclude_paths"
                },
                "txt_image": {
                  "description": "Specifies a Buf image in text format as the input, with the location as the value.",
                  "type": "string"
                },
                "compression": {
                  "description": "Compression is automatically detected if the file extension is .gz or .zst but can be manually specified here.",
                  "type": "string",
                  "enum": [
                    "gzip",
                    "zstd"
                  ]
                }
              },
              "minProperties": 1,
              "additionalProperties": false
            }
          ]
        }
      }
    }
  },
  "$comment": "https://buf.build/docs/configuration/v2/buf-gen-yaml",
  "$defs": {
    "types": {
      "description": "Include only the specified types when generating.",
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    },
    "exclude_types": {
      "description": "Exclude the specified types when generating.",
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    },
    "paths": {
      "description": "Include only the specified paths when generating.",
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    },
    "exclude_paths": {
      "description": "Exclude the specified paths when generating.",
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    }
  },
  "then": {
    "required": [
      "version",
      "plugins"
    ],
    "properties": {
      "plugins": {
        "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#plugins",
        "description": "Required. Each entry in the plugins key is a protoc plugin configuration. Plugins are invoked in parallel and their outputs are written in the order you specify here.",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "plugin": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#plugin",
              "type": "string",
              "description": "Required. The name of the plugin to use—can be local or remote. See <https://buf.build/docs/configuration/v1/buf-gen-yaml#plugin>."
            },
            "name": {
              "type": "string"
            },
            "remote": {
              "type": "string",
              "deprecated": true
            },
            "out": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#out",
              "type": "string",
              "description": "Required. Controls where the generated files are deposited for a given plugin. Although absolute paths are supported, this configuration is typically a relative output directory to where buf generate is run."
            },
            "opt": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#opt",
              "description": "Optional. Specifies one or more plugin options for each plugin independently. You can provide options as either a single string or a list of strings.",
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "path": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#path",
              "description": "Optional. Only works with local plugins. Overrides the default location and explicitly specifies where to locate the plugin.",
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "revision": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#revision",
              "description": "Optional. May be used along with the plugin field to pin an exact version of a remote plugin. In most cases, we recommend omitting revision, in which case the latest revision of that version of the plugin will be used (automatically pulling in the latest bug fixes).",
              "type": "integer",
              "minimum": 0
            },
            "strategy": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#strategy",
              "description": "Optional. Specifies the invocation strategy to use. See <https://buf.build/docs/configuration/v1/buf-gen-yaml#strategy>.",
              "type": "string",
              "enum": [
                "directory",
                "all"
              ]
            },
            "protoc_path": {
              "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#protoc_path",
              "description": "Optional. Only applies to the code generators that are built in to protoc. Normally, a plugin is a separate executable with a binary name like protoc-gen-<name>. But for a handful of plugins, the executable used is protoc itself. See <https://buf.build/docs/configuration/v1/buf-gen-yaml#protoc_path>.",
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ]
            },
            "types": {
              "$ref": "#/$defs/types"
            },
            "exclude_types": {
              "$ref": "#/$defs/exclude_types"
            }
          },
          "required": [
            "out"
          ],
          "additionalProperties": false
        }
      },
      "managed": {
        "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#managed",
        "description": "The managed key is used to configure managed mode, an advanced feature for Protobuf options. See <https://buf.build/docs/generate/managed-mode>.",
        "type": "object",
        "properties": {
          "enabled": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#enabled",
            "description": "Required if any other managed keys are set. Setting enabled equal to true with no other keys set enables managed mode according to default behavior. See <https://buf.build/docs/generate/managed-mode#default-behavior>.",
            "type": "boolean"
          },
          "cc_enable_arenas": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#cc_enable_arenas",
            "description": "Optional. If unset, this option is left as specified in your .proto files. As of Protocol Buffers release v3.14.0, changing this value no longer has any effect.",
            "type": "boolean"
          },
          "csharp_namespace": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#csharp_namespace",
            "description": "Optional. Controls the default C# namespace for classes generated from all of the .proto files contained within the input. Managed mode generates C# files with a top-level namespace based on each .proto file’s package, with each part transformed to PascalCase.",
            "type": "object",
            "properties": {
              "except": {
                "description": "Optional. Removes the specified modules from the default csharp_namespace option behavior. The except keys must be valid module names.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "override": {
                "description": "Optional. Overrides the csharp_namespace value used for specific modules. The override keys must be valid module names.",
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "go_package_prefix": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#go_package_prefix",
            "description": "Optional. Controls what the go_package value is set to for all of the .proto files contained within the input. If unset, this option is left as specified in your .proto files.",
            "type": "object",
            "required": [
              "default"
            ],
            "properties": {
              "default": {
                "description": "Required if the go_package_prefix key is set. The default value is used as a prefix for the go_package value set in each of the files. It must be a relative file path that must not jump context from the current directory—that is, it must be subdirectories relative to the current working directory.",
                "type": "string"
              },
              "except": {
                "description": "Optional. Removes certain modules from the go_package option behavior. The except values must be valid module names. There are situations where you may want to enable managed mode for the go_package option in most of your Protobuf files, but not necessarily for all of your Protobuf files. This is particularly relevant for the buf.build/googleapis/googleapis module, which points its go_package value to an external repository. Popular libraries such as grpc-go depend on these go_package values, so it's important that managed mode does not overwrite them.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "override": {
                "description": "Optional. Overrides the go_package file option value used for specific modules. The override keys must be valid module names. Additionally, the corresponding override values must be a valid Go import path and must not jump context from the current directory. As an example, ../external is invalid. This setting is used for workspace environments, where you have a module that imports from another module in the same workspace, and you need to generate the Go code for each module in different directories. This is particularly relevant for repositories that decouple their private API definitions from their public API definitions.",
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "java_multiple_files": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#java_multiple_files",
            "description": "Optional. Controls what the java_multiple_files value is set to for all of the .proto files contained within the input. The only accepted values are false and true. Managed mode defaults to true (Protobuf's default is false). See <https://buf.build/docs/configuration/v1/buf-gen-yaml#java_multiple_files>.",
            "type": "boolean"
          },
          "java_package_prefix": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#java_package_prefix",
            "description": "Optional. Controls what is prepended to the java_package value is set to for all of the .proto files contained within the input. If this is unset, managed mode's default value is `com`.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "required": [
                  "default"
                ],
                "properties": {
                  "default": {
                    "description": "Required if the java_package_prefix key is set. The default value is used as a prefix for the java_package value set in each of the files.",
                    "type": "string"
                  },
                  "except": {
                    "description": "Optional. Removes the specified modules from the java_package option behavior. The except keys must be valid module names.",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "override": {
                    "description": "Optional. Overrides the java_package option value used for specific modules. The override keys must be valid module names.",
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "java_string_check_utf8": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#java_string_check_utf8",
            "description": "Optional. Controls what the java_string_check_utf8 value is set to for all of the .proto files contained within the input. The only accepted values are false and true. If unset, this option is left as specified in your .proto files. Protobuf's default is false.",
            "type": "boolean"
          },
          "objc_class_prefix": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#objc_class_prefix",
            "description": "Optional. When managed mode is enabled, this defaults to an abbreviation of the package name as described in the default behavior section. The value is prepended to all generated classes. See <https://buf.build/docs/generate/managed-mode#default-behavior>.",
            "type": "object",
            "required": [
              "default"
            ],
            "properties": {
              "default": {
                "description": "Optional. Overrides managed mode's default value for the class prefix.",
                "type": "string"
              },
              "except": {
                "description": "Optional. Removes the specified modules from the objc_class_prefix option behavior. The except keys must be valid module names.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "override": {
                "description": "Optional. Overrides any default objc_class_prefix option value for specific modules. The override keys must be valid module names.",
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "optimize_for": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#optimize_for",
            "description": "Optional. Controls what the optimize_for value is set to for all of the .proto files contained within the input. The only accepted values are SPEED, CODE_SIZE and LITE_RUNTIME. Managed mode will not modify this option if unset.",
            "type": "string",
            "enum": [
              "SPEED",
              "CODE_SIZE",
              "LITE_RUNTIME"
            ]
          },
          "ruby_package": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#ruby_package",
            "description": "Optional. Controls what the ruby_package value is set to for all of the .proto files contained within the input. Managed mode's default value is the package name with each package sub-name capitalized, with :: substituted for .",
            "type": "object",
            "properties": {
              "except": {
                "description": "Optional. Removes the specified modules from the ruby_package file option override behavior. The except keys must be valid module names.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "override": {
                "description": "Optional. Overrides the ruby_package file option value used for specific modules. The override keys must be valid module names.",
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "override": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-gen-yaml#per-file-override",
            "description": "Optional. This is a list of per-file overrides for each modifier. See <https://buf.build/docs/configuration/v1/buf-gen-yaml#per-file-override>.",
            "type": "object",
            "properties": {
              "CSHARP_NAMESPACE": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "GO_PACKAGE": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "JAVA_MULTIPLE_FILES": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "JAVA_OUTER_CLASSNAME": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "JAVA_PACKAGE": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "JAVA_STRING_CHECK_UTF8": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "OBJC_CLASS_PREFIX": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "OPTIMIZE_FOR": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "PHP_METADATA_NAMESPACE": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "PHP_NAMESPACE": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "RUBY_PACKAGE": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "type": "object"
  }
}
