// DescribeConfigsRequest issues a request to describe configs that Kafka
// currently has. These are the key/value pairs that one uses to configure
// brokers and topics.
DescribeConfigsRequest => key 32, max version 4, flexible v4+
  // Resources is a list of resources to describe.
  Resources: [=>]
    // ResourceType is an enum corresponding to the type of config to describe.
    ResourceType: enum-ConfigResourceType
    // ResourceName is the name of config to describe.
    //
    // If the requested type is a topic, this corresponds to a topic name.
    //
    // If the requested type if a broker, this should either be empty or be
    // the ID of the broker this request is issued to. If it is empty, this
    // returns all broker configs, but only the dynamic configuration values.
    // If a specific ID, this returns all broker config values.
    ResourceName: string
    // ConfigNames is a list of config entries to return. Null requests all.
    ConfigNames: nullable[string]
  // IncludeSynonyms signifies whether to return config entry synonyms for
  // all config entries.
  IncludeSynonyms: bool // v1+
  // IncludeDocumentation signifies whether to return documentation for
  // config entries.
  IncludeDocumentation: bool // v3+

// DescribeConfigsResponse is returned from a DescribeConfigsRequest.
DescribeConfigsResponse =>
  ThrottleMillis(2)
  // Resources are responses for each resource in the describe config request.
  Resources: [=>]
    // ErrorCode is the error code returned for describing configs.
    //
    // INVALID_REQUEST is returned if asking to descibe an invalid resource
    // type.
    //
    // CLUSTER_AUTHORIZATION_FAILED is returned if asking to describe broker
    // configs but the client is not authorized to do so.
    //
    // TOPIC_AUTHORIZATION_FAILED is returned if asking to describe topic
    // configs but the client is not authorized to do so.
    //
    // INVALID_TOPIC_EXCEPTION is returned if the requested topic was invalid.
    //
    // UNKNOWN_TOPIC_OR_PARTITION is returned if the broker does not know of
    // the requested topic.
    ErrorCode: int16
    // ErrorMessage is an informative message if the describe config failed.
    ErrorMessage: nullable-string
    // ResourceType is the enum corresponding to the type of described config.
    ResourceType: enum-ConfigResourceType
    // ResourceName is the name corresponding to the describe config request.
    ResourceName: string
    // Configs contains information about key/value config pairs for
    // the requested resource.
    Configs: [=>]
      // Name is a key this entry corresponds to (e.g. segment.bytes).
      Name: string
      // Value is the value for this config key. If the key is sensitive,
      // the value will be null.
      Value: nullable-string
      // ReadOnly signifies whether this is not a dynamic config option.
      //
      // Note that this field is not always correct, and you may need to check
      // whether the Source is any dynamic enum. See franz-go#91 for more details.
      ReadOnly: bool
      // IsDefault is whether this is a default config option. This has been
      // replaced in favor of Source.
      IsDefault: bool // v0-v0
      // Source is where this config entry is from.
      Source: enum-ConfigSource(-1) // v1+
      // IsSensitive signifies whether this is a sensitive config key, which
      // is either a password or an unknown type.
      IsSensitive: bool
      // ConfigSynonyms contains fallback key/value pairs for this config
      // entry, in order of preference. That is, if a config entry is both
      // dynamically configured and has a default, the top level return will be
      // the dynamic configuration, while its "synonym" will be the default.
      ConfigSynonyms: [=>] // v1+
        Name: string
        Value: nullable-string
        Source: enum-ConfigSource
      // ConfigType specifies the configuration data type.
      ConfigType: enum-ConfigType // v3+
      // Documentation is optional documentation for the config entry.
      Documentation: nullable-string // v3+