// Autogenerated by the ProtoZero compiler plugin. DO NOT EDIT.

#ifndef PERFETTO_PROTOS_PROTOS_PERFETTO_CONFIG_ANDROID_PROTOLOG_CONFIG_PROTO_H_
#define PERFETTO_PROTOS_PROTOS_PERFETTO_CONFIG_ANDROID_PROTOLOG_CONFIG_PROTO_H_

#include <stddef.h>
#include <stdint.h>

#include "perfetto/protozero/field_writer.h"
#include "perfetto/protozero/message.h"
#include "perfetto/protozero/packed_repeated_fields.h"
#include "perfetto/protozero/proto_decoder.h"
#include "perfetto/protozero/proto_utils.h"

namespace perfetto {
namespace protos {
namespace pbzero {
class ProtoLogGroup;
namespace perfetto_pbzero_enum_ProtoLogConfig {
enum TracingMode : int32_t;
}  // namespace perfetto_pbzero_enum_ProtoLogConfig
using ProtoLogConfig_TracingMode = perfetto_pbzero_enum_ProtoLogConfig::TracingMode;
enum ProtoLogLevel : int32_t;
} // Namespace pbzero.
} // Namespace protos.
} // Namespace perfetto.

namespace perfetto {
namespace protos {
namespace pbzero {

namespace perfetto_pbzero_enum_ProtoLogConfig {
enum TracingMode : int32_t {
  DEFAULT = 0,
  ENABLE_ALL = 1,
};
} // namespace perfetto_pbzero_enum_ProtoLogConfig
using ProtoLogConfig_TracingMode = perfetto_pbzero_enum_ProtoLogConfig::TracingMode;


constexpr ProtoLogConfig_TracingMode ProtoLogConfig_TracingMode_MIN = ProtoLogConfig_TracingMode::DEFAULT;
constexpr ProtoLogConfig_TracingMode ProtoLogConfig_TracingMode_MAX = ProtoLogConfig_TracingMode::ENABLE_ALL;


PERFETTO_PROTOZERO_CONSTEXPR14_OR_INLINE
const char* ProtoLogConfig_TracingMode_Name(::perfetto::protos::pbzero::ProtoLogConfig_TracingMode value) {
  switch (value) {
  case ::perfetto::protos::pbzero::ProtoLogConfig_TracingMode::DEFAULT:
    return "DEFAULT";

  case ::perfetto::protos::pbzero::ProtoLogConfig_TracingMode::ENABLE_ALL:
    return "ENABLE_ALL";
  }
  return "PBZERO_UNKNOWN_ENUM_VALUE";
}

class ProtoLogGroup_Decoder : public ::protozero::TypedProtoDecoder</*MAX_FIELD_ID=*/3, /*HAS_NONPACKED_REPEATED_FIELDS=*/false> {
 public:
  ProtoLogGroup_Decoder(const uint8_t* data, size_t len) : TypedProtoDecoder(data, len) {}
  explicit ProtoLogGroup_Decoder(const std::string& raw) : TypedProtoDecoder(reinterpret_cast<const uint8_t*>(raw.data()), raw.size()) {}
  explicit ProtoLogGroup_Decoder(const ::protozero::ConstBytes& raw) : TypedProtoDecoder(raw.data, raw.size) {}
  bool has_group_name() const { return at<1>().valid(); }
  ::protozero::ConstChars group_name() const { return at<1>().as_string(); }
  bool has_log_from() const { return at<2>().valid(); }
  int32_t log_from() const { return at<2>().as_int32(); }
  bool has_collect_stacktrace() const { return at<3>().valid(); }
  bool collect_stacktrace() const { return at<3>().as_bool(); }
};

class ProtoLogGroup : public ::protozero::Message {
 public:
  using Decoder = ProtoLogGroup_Decoder;
  enum : int32_t {
    kGroupNameFieldNumber = 1,
    kLogFromFieldNumber = 2,
    kCollectStacktraceFieldNumber = 3,
  };
  static constexpr const char* GetName() { return ".perfetto.protos.ProtoLogGroup"; }


  using FieldMetadata_GroupName =
    ::protozero::proto_utils::FieldMetadata<
      1,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kString,
      std::string,
      ProtoLogGroup>;

  static constexpr FieldMetadata_GroupName kGroupName{};
  void set_group_name(const char* data, size_t size) {
    AppendBytes(FieldMetadata_GroupName::kFieldId, data, size);
  }
  void set_group_name(::protozero::ConstChars chars) {
    AppendBytes(FieldMetadata_GroupName::kFieldId, chars.data, chars.size);
  }
  void set_group_name(std::string value) {
    static constexpr uint32_t field_id = FieldMetadata_GroupName::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kString>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_LogFrom =
    ::protozero::proto_utils::FieldMetadata<
      2,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kEnum,
      ProtoLogLevel,
      ProtoLogGroup>;

  static constexpr FieldMetadata_LogFrom kLogFrom{};
  void set_log_from(ProtoLogLevel value) {
    static constexpr uint32_t field_id = FieldMetadata_LogFrom::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kEnum>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_CollectStacktrace =
    ::protozero::proto_utils::FieldMetadata<
      3,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kBool,
      bool,
      ProtoLogGroup>;

  static constexpr FieldMetadata_CollectStacktrace kCollectStacktrace{};
  void set_collect_stacktrace(bool value) {
    static constexpr uint32_t field_id = FieldMetadata_CollectStacktrace::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kBool>
        ::Append(*this, field_id, value);
  }
};

class ProtoLogConfig_Decoder : public ::protozero::TypedProtoDecoder</*MAX_FIELD_ID=*/3, /*HAS_NONPACKED_REPEATED_FIELDS=*/true> {
 public:
  ProtoLogConfig_Decoder(const uint8_t* data, size_t len) : TypedProtoDecoder(data, len) {}
  explicit ProtoLogConfig_Decoder(const std::string& raw) : TypedProtoDecoder(reinterpret_cast<const uint8_t*>(raw.data()), raw.size()) {}
  explicit ProtoLogConfig_Decoder(const ::protozero::ConstBytes& raw) : TypedProtoDecoder(raw.data, raw.size) {}
  bool has_group_overrides() const { return at<1>().valid(); }
  ::protozero::RepeatedFieldIterator<::protozero::ConstBytes> group_overrides() const { return GetRepeated<::protozero::ConstBytes>(1); }
  bool has_tracing_mode() const { return at<2>().valid(); }
  int32_t tracing_mode() const { return at<2>().as_int32(); }
  bool has_default_log_from_level() const { return at<3>().valid(); }
  int32_t default_log_from_level() const { return at<3>().as_int32(); }
};

class ProtoLogConfig : public ::protozero::Message {
 public:
  using Decoder = ProtoLogConfig_Decoder;
  enum : int32_t {
    kGroupOverridesFieldNumber = 1,
    kTracingModeFieldNumber = 2,
    kDefaultLogFromLevelFieldNumber = 3,
  };
  static constexpr const char* GetName() { return ".perfetto.protos.ProtoLogConfig"; }


  using TracingMode = ::perfetto::protos::pbzero::ProtoLogConfig_TracingMode;
  static inline const char* TracingMode_Name(TracingMode value) {
    return ::perfetto::protos::pbzero::ProtoLogConfig_TracingMode_Name(value);
  }
  static inline const TracingMode DEFAULT = TracingMode::DEFAULT;
  static inline const TracingMode ENABLE_ALL = TracingMode::ENABLE_ALL;

  using FieldMetadata_GroupOverrides =
    ::protozero::proto_utils::FieldMetadata<
      1,
      ::protozero::proto_utils::RepetitionType::kRepeatedNotPacked,
      ::protozero::proto_utils::ProtoSchemaType::kMessage,
      ProtoLogGroup,
      ProtoLogConfig>;

  static constexpr FieldMetadata_GroupOverrides kGroupOverrides{};
  template <typename T = ProtoLogGroup> T* add_group_overrides() {
    return BeginNestedMessage<T>(1);
  }


  using FieldMetadata_TracingMode =
    ::protozero::proto_utils::FieldMetadata<
      2,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kEnum,
      ProtoLogConfig_TracingMode,
      ProtoLogConfig>;

  static constexpr FieldMetadata_TracingMode kTracingMode{};
  void set_tracing_mode(ProtoLogConfig_TracingMode value) {
    static constexpr uint32_t field_id = FieldMetadata_TracingMode::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kEnum>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_DefaultLogFromLevel =
    ::protozero::proto_utils::FieldMetadata<
      3,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kEnum,
      ProtoLogLevel,
      ProtoLogConfig>;

  static constexpr FieldMetadata_DefaultLogFromLevel kDefaultLogFromLevel{};
  void set_default_log_from_level(ProtoLogLevel value) {
    static constexpr uint32_t field_id = FieldMetadata_DefaultLogFromLevel::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kEnum>
        ::Append(*this, field_id, value);
  }
};

} // Namespace.
} // Namespace.
} // Namespace.
#endif  // Include guard.
