diff --git a/common/adc_value_holder.h b/common/adc_value_holder.h index 12d5bce..2141044 100644 --- a/common/adc_value_holder.h +++ b/common/adc_value_holder.h @@ -438,8 +438,49 @@ AdcValueHolder make_arith_valueholder(GT&& getter, template class AdcSerializingValueHolder : public AdcValueHolder { +protected: + std::function _serializerWrapper = []() { + + }; + + std::function _deserializerWrapper; + + template + void init(GT&& getter, ST&& setter, VT&& validator, SRT&& serializer, DSRT&& deserializer) + { + _serializerWrapper = [wrapper = + traits::adc_pf_wrapper(std::forward(getter), std::forward(serializer))]() { + auto& getter = std::get<0>(wrapper); + auto& serializer = std::get<1>(wrapper); + + auto val = getter(); + return serializer(val); + }; + + + using v_t = traits::adc_retval_t; + + _serializerWrapper = [wrapper = + traits::adc_pf_wrapper(std::forward(setter), std::forward(validator), + std::forward(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); + + if (validator(val)) { + setter(val); + } else { + throw std::system_error(AdcValueHolderErrorCode::ERROR_VALUE_IS_NOT_VALID); + } + }; + } + public: using AdcValueHolder::AdcValueHolder; + + virtual ~AdcSerializingValueHolder() = default; };