...
This commit is contained in:
parent
7737edc77f
commit
b6edadee03
@ -379,7 +379,7 @@ public:
|
|||||||
if constexpr (traits::adc_is_tuple_v<T>) {
|
if constexpr (traits::adc_is_tuple_v<T>) {
|
||||||
AdcTupleFromCharRange(res, value, _delimiter);
|
AdcTupleFromCharRange(res, value, _delimiter);
|
||||||
} else if constexpr (traits::adc_output_char_range<T>) {
|
} else if constexpr (traits::adc_output_char_range<T>) {
|
||||||
AdcValuRangeFromCharRange(res, value, _delimiter);
|
AdcValueRangeFromCharRange(res, value, _delimiter);
|
||||||
} else {
|
} else {
|
||||||
res = AdcTrivialDeserializer<T>(value);
|
res = AdcTrivialDeserializer<T>(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -387,46 +387,46 @@ template <typename SerializedT = std::string>
|
|||||||
class AdcSerializingValueHolder : public AdcValueHolder
|
class AdcSerializingValueHolder : public AdcValueHolder
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
std::function<SerializedT()> _serializerWrapper = []() {
|
std::function<SerializedT()> _serializerWrapper;
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
std::function<void(const SerializedT&)> _deserializerWrapper;
|
std::function<void(const SerializedT&)> _deserializerWrapper;
|
||||||
|
|
||||||
template <typename GT, typename ST, typename VT, typename SRT, typename DSRT>
|
template <typename VALUET, typename SRT, typename DSRT>
|
||||||
void init(GT&& getter, ST&& setter, VT&& validator, SRT&& serializer, DSRT&& deserializer)
|
void initWrappers(SRT&& serializer, DSRT&& deserializer)
|
||||||
{
|
{
|
||||||
_serializerWrapper = [wrapper =
|
_serializerWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<SRT>(serializer)), this]() {
|
||||||
traits::adc_pf_wrapper(std::forward<GT>(getter), std::forward<SRT>(serializer))]() {
|
auto& serializer = std::get<0>(wrapper);
|
||||||
auto& getter = std::get<0>(wrapper);
|
|
||||||
auto& serializer = std::get<1>(wrapper);
|
auto val = _getterFunc<VALUET>[this]();
|
||||||
|
|
||||||
auto val = getter();
|
|
||||||
return serializer(val);
|
return serializer(val);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
using v_t = traits::adc_retval_t<GT>;
|
_serializerWrapper = [wrapper = traits::adc_pf_wrapper(std::forward<DSRT>(deserializer)),
|
||||||
|
this](const SerializedT& sval) {
|
||||||
|
auto& deserializer = std::get<0>(wrapper);
|
||||||
|
|
||||||
_serializerWrapper = [wrapper =
|
VALUET val = deserializer(sval);
|
||||||
traits::adc_pf_wrapper(std::forward<ST>(setter), std::forward<VT>(validator),
|
|
||||||
std::forward<DSRT>(deserializer))](const SerializedT& sval) {
|
|
||||||
auto& setter = std::get<0>(wrapper);
|
|
||||||
auto& validator = std::get<1>(wrapper);
|
|
||||||
auto& deserializer = std::get<2>(wrapper);
|
|
||||||
|
|
||||||
v_t val = deserializer(sval);
|
_setterFunc<VALUET>[this](val);
|
||||||
|
|
||||||
if (validator(val)) {
|
|
||||||
setter(val);
|
|
||||||
} else {
|
|
||||||
throw std::system_error(AdcValueHolderErrorCode::ERROR_VALUE_IS_NOT_VALID);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using AdcValueHolder::AdcValueHolder;
|
template <typename GT,
|
||||||
|
typename ST,
|
||||||
|
typename VALT = std::decay_t<traits::adc_retval_t<GT>>,
|
||||||
|
typename VT = decltype(AdcValueHolder::AdcValueHolderDummyValidator<VALT>),
|
||||||
|
typename SRT,
|
||||||
|
typename DSRT>
|
||||||
|
AdcSerializingValueHolder(GT&& getter, ST&& setter, VT&& validator, SRT&& serializer, DSRT&& deserializer)
|
||||||
|
: AdcValueHolder(std::forward<GT>(getter), std::forward<ST>(setter), std::forward<VT>(validator))
|
||||||
|
{
|
||||||
|
using value_t = std::decay_t<traits::adc_retval_t<GT>>;
|
||||||
|
|
||||||
|
initWrappers<value_t>(std::forward<SRT>(serializer), std::forward<DSRT>(deserializer));
|
||||||
|
}
|
||||||
|
|
||||||
virtual ~AdcSerializingValueHolder() = default;
|
virtual ~AdcSerializingValueHolder() = default;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user