This commit is contained in:
Timur A. Fatkhullin
2024-05-01 17:17:05 +03:00
parent 066cb7cf95
commit 0d64e0cf44
5 changed files with 35 additions and 14 deletions

View File

@@ -55,6 +55,7 @@ struct adc_func_traits_helper_t<R> {
using ret_t = R;
using args_t = std::tuple<>;
using arg1_t = void;
static constexpr size_t arity = 0;
};
template <typename R, typename Arg, typename... Args>
@@ -62,6 +63,7 @@ struct adc_func_traits_helper_t<R, Arg, Args...> {
using ret_t = R;
using args_t = std::tuple<Arg, Args...>;
using arg1_t = Arg;
static constexpr size_t arity = sizeof...(Args) + 1;
};
@@ -109,7 +111,7 @@ using adc_func_arg1_t = typename adc_func_traits<T>::arg1_t;
template <typename T>
using adc_deduced_type =
std::conditional_t<std::is_lvalue_reference_v<T> && !std::is_const_v<std::remove_reference_t<T>>,
T,
T&,
std::remove_cvref_t<T>>;

View File

@@ -419,6 +419,10 @@ public:
template <typename ValueT, typename SerializedT>
static ValueT deserialize(const SerializedT& svalue)
{
if constexpr (std::is_void_v<ValueT>) {
return;
}
ValueT res;
if constexpr (traits::adc_is_tuple_v<ValueT>) {

View File

@@ -382,9 +382,11 @@ protected:
static_assert(std::is_convertible_v<traits::adc_retval_t<DSRT>, ValueT>,
"INVALID RETURNED TYPE OF DESERIALIZING CALLABLE!!!");
_serializerWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<SRT>(serializer)), this]() {
auto& serializer = std::get<0>(wrapper);
auto val = _getterFunc<ValueT>[this]();
return serializer(val);
@@ -486,6 +488,8 @@ public:
AdcValueHolder::resetValueHolder(std::forward<GT>(getter), std::forward<ST>(setter),
std::forward<VT>(validator));
initWrappers<ret_value_t<GT>>(std::forward<SRT>(serializer), std::forward<DSRT>(deserializer));
return *this;
}
@@ -507,6 +511,8 @@ public:
std::forward<VT>(validator), std::tuple<Ts...>{});
initWrappers<ret_value_t<GT>>(std::forward<SRT>(serializer), std::forward<DSRT>(deserializer));
return *this;
}
template <typename GT,
@@ -524,6 +530,8 @@ public:
AdcValueHolder::resetValueHolder(std::forward<GT>(getter), std::forward<ST>(setter), std::tuple<Ts...>{});
initWrappers<ret_value_t<GT>>(std::forward<SRT>(serializer), std::forward<DSRT>(deserializer));
return *this;
}