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

#ifndef PERFETTO_PROTOS_PROTOS_PERFETTO_TRACE_ANDROID_APP_WAKELOCK_DATA_PROTO_H_
#define PERFETTO_PROTOS_PROTOS_PERFETTO_TRACE_ANDROID_APP_WAKELOCK_DATA_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 AppWakelockInfo;
} // Namespace pbzero.
} // Namespace protos.
} // Namespace perfetto.

namespace perfetto {
namespace protos {
namespace pbzero {

class AppWakelockBundle_Decoder : public ::protozero::TypedProtoDecoder</*MAX_FIELD_ID=*/4, /*HAS_NONPACKED_REPEATED_FIELDS=*/false> {
 public:
  AppWakelockBundle_Decoder(const uint8_t* data, size_t len) : TypedProtoDecoder(data, len) {}
  explicit AppWakelockBundle_Decoder(const std::string& raw) : TypedProtoDecoder(reinterpret_cast<const uint8_t*>(raw.data()), raw.size()) {}
  explicit AppWakelockBundle_Decoder(const ::protozero::ConstBytes& raw) : TypedProtoDecoder(raw.data, raw.size) {}
  bool has_intern_id() const { return at<1>().valid(); }
  ::protozero::PackedRepeatedFieldIterator<::protozero::proto_utils::ProtoWireType::kVarInt, uint32_t> intern_id(bool* parse_error_ptr) const { return GetPackedRepeated<::protozero::proto_utils::ProtoWireType::kVarInt, uint32_t>(1, parse_error_ptr); }
  bool has_encoded_ts() const { return at<2>().valid(); }
  ::protozero::PackedRepeatedFieldIterator<::protozero::proto_utils::ProtoWireType::kVarInt, uint64_t> encoded_ts(bool* parse_error_ptr) const { return GetPackedRepeated<::protozero::proto_utils::ProtoWireType::kVarInt, uint64_t>(2, parse_error_ptr); }
  bool has_info() const { return at<3>().valid(); }
  ::protozero::ConstBytes info() const { return at<3>().as_bytes(); }
  bool has_acquired() const { return at<4>().valid(); }
  bool acquired() const { return at<4>().as_bool(); }
};

class AppWakelockBundle : public ::protozero::Message {
 public:
  using Decoder = AppWakelockBundle_Decoder;
  enum : int32_t {
    kInternIdFieldNumber = 1,
    kEncodedTsFieldNumber = 2,
    kInfoFieldNumber = 3,
    kAcquiredFieldNumber = 4,
  };
  static constexpr const char* GetName() { return ".perfetto.protos.AppWakelockBundle"; }


  using FieldMetadata_InternId =
    ::protozero::proto_utils::FieldMetadata<
      1,
      ::protozero::proto_utils::RepetitionType::kRepeatedPacked,
      ::protozero::proto_utils::ProtoSchemaType::kUint32,
      uint32_t,
      AppWakelockBundle>;

  static constexpr FieldMetadata_InternId kInternId{};
  void set_intern_id(const ::protozero::PackedVarInt& packed_buffer) {
    AppendBytes(FieldMetadata_InternId::kFieldId, packed_buffer.data(),
                packed_buffer.size());
  }

  using FieldMetadata_EncodedTs =
    ::protozero::proto_utils::FieldMetadata<
      2,
      ::protozero::proto_utils::RepetitionType::kRepeatedPacked,
      ::protozero::proto_utils::ProtoSchemaType::kUint64,
      uint64_t,
      AppWakelockBundle>;

  static constexpr FieldMetadata_EncodedTs kEncodedTs{};
  void set_encoded_ts(const ::protozero::PackedVarInt& packed_buffer) {
    AppendBytes(FieldMetadata_EncodedTs::kFieldId, packed_buffer.data(),
                packed_buffer.size());
  }

  using FieldMetadata_Info =
    ::protozero::proto_utils::FieldMetadata<
      3,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kMessage,
      AppWakelockInfo,
      AppWakelockBundle>;

  static constexpr FieldMetadata_Info kInfo{};
  template <typename T = AppWakelockInfo> T* set_info() {
    return BeginNestedMessage<T>(3);
  }


  using FieldMetadata_Acquired =
    ::protozero::proto_utils::FieldMetadata<
      4,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kBool,
      bool,
      AppWakelockBundle>;

  static constexpr FieldMetadata_Acquired kAcquired{};
  void set_acquired(bool value) {
    static constexpr uint32_t field_id = FieldMetadata_Acquired::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 AppWakelockInfo_Decoder : public ::protozero::TypedProtoDecoder</*MAX_FIELD_ID=*/6, /*HAS_NONPACKED_REPEATED_FIELDS=*/false> {
 public:
  AppWakelockInfo_Decoder(const uint8_t* data, size_t len) : TypedProtoDecoder(data, len) {}
  explicit AppWakelockInfo_Decoder(const std::string& raw) : TypedProtoDecoder(reinterpret_cast<const uint8_t*>(raw.data()), raw.size()) {}
  explicit AppWakelockInfo_Decoder(const ::protozero::ConstBytes& raw) : TypedProtoDecoder(raw.data, raw.size) {}
  bool has_iid() const { return at<1>().valid(); }
  int32_t iid() const { return at<1>().as_int32(); }
  bool has_tag() const { return at<2>().valid(); }
  ::protozero::ConstChars tag() const { return at<2>().as_string(); }
  bool has_flags() const { return at<3>().valid(); }
  int32_t flags() const { return at<3>().as_int32(); }
  bool has_owner_pid() const { return at<4>().valid(); }
  int32_t owner_pid() const { return at<4>().as_int32(); }
  bool has_owner_uid() const { return at<5>().valid(); }
  int32_t owner_uid() const { return at<5>().as_int32(); }
  bool has_work_uid() const { return at<6>().valid(); }
  int32_t work_uid() const { return at<6>().as_int32(); }
};

class AppWakelockInfo : public ::protozero::Message {
 public:
  using Decoder = AppWakelockInfo_Decoder;
  enum : int32_t {
    kIidFieldNumber = 1,
    kTagFieldNumber = 2,
    kFlagsFieldNumber = 3,
    kOwnerPidFieldNumber = 4,
    kOwnerUidFieldNumber = 5,
    kWorkUidFieldNumber = 6,
  };
  static constexpr const char* GetName() { return ".perfetto.protos.AppWakelockInfo"; }


  using FieldMetadata_Iid =
    ::protozero::proto_utils::FieldMetadata<
      1,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kInt32,
      int32_t,
      AppWakelockInfo>;

  static constexpr FieldMetadata_Iid kIid{};
  void set_iid(int32_t value) {
    static constexpr uint32_t field_id = FieldMetadata_Iid::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kInt32>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_Tag =
    ::protozero::proto_utils::FieldMetadata<
      2,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kString,
      std::string,
      AppWakelockInfo>;

  static constexpr FieldMetadata_Tag kTag{};
  void set_tag(const char* data, size_t size) {
    AppendBytes(FieldMetadata_Tag::kFieldId, data, size);
  }
  void set_tag(::protozero::ConstChars chars) {
    AppendBytes(FieldMetadata_Tag::kFieldId, chars.data, chars.size);
  }
  void set_tag(std::string value) {
    static constexpr uint32_t field_id = FieldMetadata_Tag::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_Flags =
    ::protozero::proto_utils::FieldMetadata<
      3,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kInt32,
      int32_t,
      AppWakelockInfo>;

  static constexpr FieldMetadata_Flags kFlags{};
  void set_flags(int32_t value) {
    static constexpr uint32_t field_id = FieldMetadata_Flags::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kInt32>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_OwnerPid =
    ::protozero::proto_utils::FieldMetadata<
      4,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kInt32,
      int32_t,
      AppWakelockInfo>;

  static constexpr FieldMetadata_OwnerPid kOwnerPid{};
  void set_owner_pid(int32_t value) {
    static constexpr uint32_t field_id = FieldMetadata_OwnerPid::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kInt32>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_OwnerUid =
    ::protozero::proto_utils::FieldMetadata<
      5,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kInt32,
      int32_t,
      AppWakelockInfo>;

  static constexpr FieldMetadata_OwnerUid kOwnerUid{};
  void set_owner_uid(int32_t value) {
    static constexpr uint32_t field_id = FieldMetadata_OwnerUid::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kInt32>
        ::Append(*this, field_id, value);
  }

  using FieldMetadata_WorkUid =
    ::protozero::proto_utils::FieldMetadata<
      6,
      ::protozero::proto_utils::RepetitionType::kNotRepeated,
      ::protozero::proto_utils::ProtoSchemaType::kInt32,
      int32_t,
      AppWakelockInfo>;

  static constexpr FieldMetadata_WorkUid kWorkUid{};
  void set_work_uid(int32_t value) {
    static constexpr uint32_t field_id = FieldMetadata_WorkUid::kFieldId;
    // Call the appropriate protozero::Message::Append(field_id, ...)
    // method based on the type of the field.
    ::protozero::internal::FieldWriter<
      ::protozero::proto_utils::ProtoSchemaType::kInt32>
        ::Append(*this, field_id, value);
  }
};

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