summaryrefslogtreecommitdiff
path: root/src/codec/data.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/codec/data.h')
-rw-r--r--src/codec/data.h25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/codec/data.h b/src/codec/data.h
index 469e214..5e6fd25 100644
--- a/src/codec/data.h
+++ b/src/codec/data.h
@@ -76,6 +76,27 @@ private:
};
template<typename... T, string_literal... literals>
+class data<schema::Union<schema::Member<T, literals>...>, encode::Native> {
+private:
+ std::variant<data<T,encode::Native>...> value_;
+public:
+ data() = default;
+
+ SAW_DEFAULT_COPY(data);
+ SAW_DEFAULT_MOVE(data);
+
+ template<string_literal lit>
+ bool holds_alternative() const {
+ return std::holds_alternative<parameter_key_pack_index<lit, literals...>::value>(value_);
+ }
+
+ template<string_literal lit>
+ data<typename parameter_pack_type<parameter_key_pack_index<lit, literals...>::value>::type, encode::Native>& get(){
+ return std::get<parameter_key_pack_index<lit, literals...>::value>(value_);
+ }
+};
+
+template<typename... T, string_literal... literals>
class data<schema::Struct<schema::Member<T, literals>...>, encode::Native> {
private:
std::tuple<data<T,encode::Native>...> value_;
@@ -135,8 +156,8 @@ public:
}
};
-template<typename T>
-class data<schema::Array<T>, encode::Native> {
+template<typename T, size_t Dim>
+class data<schema::Array<T,Dim>, encode::Native> {
private:
std::vector<data<T, encode::Native>> value_;
public: