namespace pgtest {
struct FooBar {
int i{};
std::string s;
double d{};
std::vector<int> a;
std::vector<std::string> v;
bool operator==(const FooBar& rhs) const {
return i == rhs.i && s == rhs.s && d == rhs.d && a == rhs.a && v == rhs.v;
}
};
struct FooBarWithOptionalFields {
std::optional<int> i;
std::optional<std::string> s;
std::optional<double> d;
std::vector<int> a;
std::vector<std::string> v;
bool operator==(const FooBarWithOptionalFields& rhs) const {
return i == rhs.i && s == rhs.s && d == rhs.d && a == rhs.a && v == rhs.v;
}
};
using FooBarOpt = std::optional<FooBar>;
class FooClass {
int i{};
std::string s;
double d{};
std::vector<int> a;
std::vector<std::string> v;
public:
FooClass() = default;
explicit FooClass(
int x) : i(x), s(
std::
to_string(x)), d(x), a{i}, v{s} {}
auto Introspect() { return std::tie(i, s, d, a, v); }
auto GetI() const { return i; }
auto GetS() const { return s; }
auto GetD() const { return d; }
auto GetA() const { return a; }
auto GetV() const { return v; }
};
using FooTuple = std::tuple<int, std::string, double, std::vector<int>,
std::vector<std::string>>;
struct BunchOfFoo {
std::vector<FooBar> foobars;
bool operator==(const BunchOfFoo& rhs) const {
return foobars == rhs.foobars;
}
};
}