2626#include " AreReaderAndWriter.hpp"
2727#include " Parent.hpp"
2828#include " ParserSharedPtr.hpp"
29+ #include " Parser_array.hpp"
30+ #include " Parser_base.hpp"
2931#include " Parser_box.hpp"
3032#include " Parser_optional.hpp"
3133#include " Parser_ref.hpp"
3234#include " Parser_reference_wrapper.hpp"
35+ #include " Parser_rfl_tuple.hpp"
36+ #include " Parser_tuple.hpp"
3337#include " Parser_unique_ptr.hpp"
34- #include " Parser_base.hpp"
3538#include " call_destructors_where_necessary.hpp"
3639#include " is_tagged_union_wrapper.hpp"
3740#include " make_type_name.hpp"
@@ -64,7 +67,7 @@ struct Parser {
6467
6568 } else if constexpr (is_unique_ptr_v<T>) {
6669 return ParserUniquePtr<R, W, typename T::element_type,
67- ProcessorsType>::read (_r, _var);
70+ ProcessorsType>::read (_r, _var);
6871
6972 } else if constexpr (is_optional_v<T>) {
7073 return ParserOptional<R, W, typename std::remove_cvref_t <T>::value_type,
@@ -84,6 +87,17 @@ struct Parser {
8487 return ParserReferenceWrapper<R, W, typename std::remove_cvref_t <T>::type,
8588 ProcessorsType>::read (_r, _var);
8689
90+ } else if constexpr (is_array_v<T>) {
91+ using IsArray = is_array<T>;
92+ return ParserArray<R, W, typename IsArray::element_type, IsArray::size,
93+ ProcessorsType>::read (_r, _var);
94+
95+ } else if constexpr (is_tuple_v<T>) {
96+ return ParserTuple<R, W, T, ProcessorsType>::read (_r, _var);
97+
98+ } else if constexpr (is_rfl_tuple_v<T>) {
99+ return ParserRflTuple<R, W, T, ProcessorsType>::read (_r, _var);
100+
87101 } else if constexpr (internal::has_read_reflector<T>) {
88102 const auto wrap_in_t = [](auto && _named_tuple) -> Result<T> {
89103 try {
@@ -164,6 +178,17 @@ struct Parser {
164178 ParserReferenceWrapper<R, W, typename std::remove_cvref_t <T>::type,
165179 ProcessorsType>::write (_w, _var, _parent);
166180
181+ } else if constexpr (is_array_v<T>) {
182+ using IsArray = is_array<T>;
183+ ParserArray<R, W, typename IsArray::element_type, IsArray::size,
184+ ProcessorsType>::write (_w, _var, _parent);
185+
186+ } else if constexpr (is_tuple_v<T>) {
187+ ParserTuple<R, W, T, ProcessorsType>::write (_w, _var, _parent);
188+
189+ } else if constexpr (is_rfl_tuple_v<T>) {
190+ ParserRflTuple<R, W, T, ProcessorsType>::write (_w, _var, _parent);
191+
167192 } else if constexpr (internal::has_write_reflector<T>) {
168193 Parser<R, W, typename Reflector<T>::ReflType, ProcessorsType>::write (
169194 _w, Reflector<T>::from (_var), _parent);
@@ -228,6 +253,17 @@ struct Parser {
228253 return ParserReferenceWrapper<R, W, typename U::type,
229254 ProcessorsType>::to_schema (_definitions);
230255
256+ } else if constexpr (is_array_v<U>) {
257+ using IsArray = is_array<U>;
258+ return ParserArray<R, W, typename IsArray::element_type, IsArray::size,
259+ ProcessorsType>::to_schema (_definitions);
260+
261+ } else if constexpr (is_tuple_v<U>) {
262+ return ParserTuple<R, W, U, ProcessorsType>::to_schema (_definitions);
263+
264+ } else if constexpr (is_rfl_tuple_v<U>) {
265+ return ParserRflTuple<R, W, U, ProcessorsType>::to_schema (_definitions);
266+
231267 } else if constexpr (rfl::internal::is_description_v<U>) {
232268 return make_description<U>(_definitions);
233269
0 commit comments