// protoc generate parameter
// clang-format off
// namespace=struct_pb_sample
// =========================
#pragma once

// Generated by the protocol buffer compiler (struct_pb).  DO NOT EDIT!
// source: benchmark.proto

#include <limits>
#include <string>
#include <type_traits>
#include <memory>
#include <map>
#include <variant>
#include <vector>
#include <optional>
#include "struct_pb/struct_pb.hpp"

namespace struct_pb_sample {
struct Vec3;
struct Weapon;
struct Monster;
struct Monsters;
struct rect32;
struct rect32s;
struct person;
struct persons;
struct Vec3 {
  float x; // float, field number = 1
  float y; // float, field number = 2
  float z; // float, field number = 3
};
struct Weapon {
  std::string name; // string, field number = 1
  int32_t damage; // int32, field number = 2
};
struct Monster {
  enum class Color: int {
    Red = 0,
    Green = 1,
    Blue = 2,
  };
  std::unique_ptr<::struct_pb_sample::Vec3> pos; // message, field number = 1
  int32_t mana; // int32, field number = 2
  int32_t hp; // int32, field number = 3
  std::string name; // string, field number = 4
  std::string inventory; // bytes, field number = 5
  ::struct_pb_sample::Monster::Color color; // enum, field number = 6
  std::vector<::struct_pb_sample::Weapon> weapons; // message, field number = 7
  std::unique_ptr<::struct_pb_sample::Weapon> equipped; // message, field number = 8
  std::vector<::struct_pb_sample::Vec3> path; // message, field number = 9
};
struct Monsters {
  std::vector<::struct_pb_sample::Monster> monsters; // message, field number = 1
};
struct rect32 {
  int32_t x; // int32, field number = 1
  int32_t y; // int32, field number = 2
  int32_t width; // int32, field number = 3
  int32_t height; // int32, field number = 4
};
struct rect32s {
  std::vector<::struct_pb_sample::rect32> rect32_list; // message, field number = 1
};
struct person {
  int32_t id; // int32, field number = 1
  std::string name; // string, field number = 2
  int32_t age; // int32, field number = 3
  double salary; // double, field number = 4
};
struct persons {
  std::vector<::struct_pb_sample::person> person_list; // message, field number = 1
};

} // namespace struct_pb_sample
namespace struct_pb {
namespace internal {
// ::struct_pb_sample::Vec3
template<>
std::size_t get_needed_size<::struct_pb_sample::Vec3>(const ::struct_pb_sample::Vec3& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::Vec3>(char* data, std::size_t size, const ::struct_pb_sample::Vec3& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Vec3>(::struct_pb_sample::Vec3& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Vec3>(::struct_pb_sample::Vec3& t, const char* data, std::size_t size);

// ::struct_pb_sample::Weapon
template<>
std::size_t get_needed_size<::struct_pb_sample::Weapon>(const ::struct_pb_sample::Weapon& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::Weapon>(char* data, std::size_t size, const ::struct_pb_sample::Weapon& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Weapon>(::struct_pb_sample::Weapon& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Weapon>(::struct_pb_sample::Weapon& t, const char* data, std::size_t size);

// ::struct_pb_sample::Monster
template<>
std::size_t get_needed_size<::struct_pb_sample::Monster>(const ::struct_pb_sample::Monster& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::Monster>(char* data, std::size_t size, const ::struct_pb_sample::Monster& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Monster>(::struct_pb_sample::Monster& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Monster>(::struct_pb_sample::Monster& t, const char* data, std::size_t size);

// ::struct_pb_sample::Monsters
template<>
std::size_t get_needed_size<::struct_pb_sample::Monsters>(const ::struct_pb_sample::Monsters& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::Monsters>(char* data, std::size_t size, const ::struct_pb_sample::Monsters& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Monsters>(::struct_pb_sample::Monsters& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::Monsters>(::struct_pb_sample::Monsters& t, const char* data, std::size_t size);

// ::struct_pb_sample::rect32
template<>
std::size_t get_needed_size<::struct_pb_sample::rect32>(const ::struct_pb_sample::rect32& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::rect32>(char* data, std::size_t size, const ::struct_pb_sample::rect32& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::rect32>(::struct_pb_sample::rect32& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::rect32>(::struct_pb_sample::rect32& t, const char* data, std::size_t size);

// ::struct_pb_sample::rect32s
template<>
std::size_t get_needed_size<::struct_pb_sample::rect32s>(const ::struct_pb_sample::rect32s& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::rect32s>(char* data, std::size_t size, const ::struct_pb_sample::rect32s& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::rect32s>(::struct_pb_sample::rect32s& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::rect32s>(::struct_pb_sample::rect32s& t, const char* data, std::size_t size);

// ::struct_pb_sample::person
template<>
std::size_t get_needed_size<::struct_pb_sample::person>(const ::struct_pb_sample::person& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::person>(char* data, std::size_t size, const ::struct_pb_sample::person& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::person>(::struct_pb_sample::person& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::person>(::struct_pb_sample::person& t, const char* data, std::size_t size);

// ::struct_pb_sample::persons
template<>
std::size_t get_needed_size<::struct_pb_sample::persons>(const ::struct_pb_sample::persons& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
void serialize_to<::struct_pb_sample::persons>(char* data, std::size_t size, const ::struct_pb_sample::persons& t, const ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::persons>(::struct_pb_sample::persons& t, const char* data, std::size_t size, ::struct_pb::UnknownFields& unknown_fields);
template<>
bool deserialize_to<::struct_pb_sample::persons>(::struct_pb_sample::persons& t, const char* data, std::size_t size);

} // internal
} // struct_pb
// clang-format on
