blob: 1ded4e93811a4d67bd06c1f8eb5a718489f5a29a [file] [log] [blame]
#ifndef __MY_CONFIG_LIB_H__
#define __MY_CONFIG_LIB_H__
#include <fidl/fuchsia.driver.framework/cpp/wire.h>
#include <lib/inspect/cpp/inspect.h>
#include <iostream>
#include <string>
#include <vector>
namespace cpp_driver_config_lib {
struct Config {
public:
static Config TakeFromStartArgs(
fuchsia_driver_framework::wire::DriverStartArgs& start_args) noexcept;
private:
struct Storage_;
public:
Config(Storage_ storage) noexcept : storage_(std::move(storage)) {}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
Config() = default;
#pragma clang diagnostic pop
void RecordInspect(inspect::Node* node);
const bool& my_flag() const { return storage_.my_flag; }
bool& my_flag() { return storage_.my_flag; }
const int16_t& my_int16() const { return storage_.my_int16; }
int16_t& my_int16() { return storage_.my_int16; }
const int32_t& my_int32() const { return storage_.my_int32; }
int32_t& my_int32() { return storage_.my_int32; }
const int64_t& my_int64() const { return storage_.my_int64; }
int64_t& my_int64() { return storage_.my_int64; }
const int8_t& my_int8() const { return storage_.my_int8; }
int8_t& my_int8() { return storage_.my_int8; }
const std::string& my_string() const { return storage_.my_string; }
std::string& my_string() { return storage_.my_string; }
const uint16_t& my_uint16() const { return storage_.my_uint16; }
uint16_t& my_uint16() { return storage_.my_uint16; }
const uint32_t& my_uint32() const { return storage_.my_uint32; }
uint32_t& my_uint32() { return storage_.my_uint32; }
const uint64_t& my_uint64() const { return storage_.my_uint64; }
uint64_t& my_uint64() { return storage_.my_uint64; }
const uint8_t& my_uint8() const { return storage_.my_uint8; }
uint8_t& my_uint8() { return storage_.my_uint8; }
const std::vector<bool>& my_vector_of_flag() const {
return storage_.my_vector_of_flag;
}
std::vector<bool>& my_vector_of_flag() { return storage_.my_vector_of_flag; }
const std::vector<int16_t>& my_vector_of_int16() const {
return storage_.my_vector_of_int16;
}
std::vector<int16_t>& my_vector_of_int16() {
return storage_.my_vector_of_int16;
}
const std::vector<int32_t>& my_vector_of_int32() const {
return storage_.my_vector_of_int32;
}
std::vector<int32_t>& my_vector_of_int32() {
return storage_.my_vector_of_int32;
}
const std::vector<int64_t>& my_vector_of_int64() const {
return storage_.my_vector_of_int64;
}
std::vector<int64_t>& my_vector_of_int64() {
return storage_.my_vector_of_int64;
}
const std::vector<int8_t>& my_vector_of_int8() const {
return storage_.my_vector_of_int8;
}
std::vector<int8_t>& my_vector_of_int8() {
return storage_.my_vector_of_int8;
}
const std::vector<std::string>& my_vector_of_string() const {
return storage_.my_vector_of_string;
}
std::vector<std::string>& my_vector_of_string() {
return storage_.my_vector_of_string;
}
const std::vector<uint16_t>& my_vector_of_uint16() const {
return storage_.my_vector_of_uint16;
}
std::vector<uint16_t>& my_vector_of_uint16() {
return storage_.my_vector_of_uint16;
}
const std::vector<uint32_t>& my_vector_of_uint32() const {
return storage_.my_vector_of_uint32;
}
std::vector<uint32_t>& my_vector_of_uint32() {
return storage_.my_vector_of_uint32;
}
const std::vector<uint64_t>& my_vector_of_uint64() const {
return storage_.my_vector_of_uint64;
}
std::vector<uint64_t>& my_vector_of_uint64() {
return storage_.my_vector_of_uint64;
}
const std::vector<uint8_t>& my_vector_of_uint8() const {
return storage_.my_vector_of_uint8;
}
std::vector<uint8_t>& my_vector_of_uint8() {
return storage_.my_vector_of_uint8;
}
private:
// TODO(https://fxbug.dev/100147) store a natural types object here instead
struct Storage_ final {
bool my_flag;
int16_t my_int16;
int32_t my_int32;
int64_t my_int64;
int8_t my_int8;
std::string my_string;
uint16_t my_uint16;
uint32_t my_uint32;
uint64_t my_uint64;
uint8_t my_uint8;
std::vector<bool> my_vector_of_flag;
std::vector<int16_t> my_vector_of_int16;
std::vector<int32_t> my_vector_of_int32;
std::vector<int64_t> my_vector_of_int64;
std::vector<int8_t> my_vector_of_int8;
std::vector<std::string> my_vector_of_string;
std::vector<uint16_t> my_vector_of_uint16;
std::vector<uint32_t> my_vector_of_uint32;
std::vector<uint64_t> my_vector_of_uint64;
std::vector<uint8_t> my_vector_of_uint8;
};
Storage_ storage_;
};
std::ostream& operator<<(std::ostream& os,
const cpp_driver_config_lib::Config& c);
} // namespace cpp_driver_config_lib
#endif