...
This commit is contained in:
parent
fd02bd2ad7
commit
ede0012268
@ -438,8 +438,49 @@ AdcValueHolder make_arith_valueholder(GT&& getter,
|
||||
template <typename SerializedT = std::string>
|
||||
class AdcSerializingValueHolder : public AdcValueHolder
|
||||
{
|
||||
protected:
|
||||
std::function<SerializedT()> _serializerWrapper = []() {
|
||||
|
||||
};
|
||||
|
||||
std::function<void(const SerializedT&)> _deserializerWrapper;
|
||||
|
||||
template <typename GT, typename ST, typename VT, typename SRT, typename DSRT>
|
||||
void init(GT&& getter, ST&& setter, VT&& validator, SRT&& serializer, DSRT&& deserializer)
|
||||
{
|
||||
_serializerWrapper = [wrapper =
|
||||
traits::adc_pf_wrapper(std::forward<GT>(getter), std::forward<SRT>(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<GT>;
|
||||
|
||||
_serializerWrapper = [wrapper =
|
||||
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);
|
||||
|
||||
if (validator(val)) {
|
||||
setter(val);
|
||||
} else {
|
||||
throw std::system_error(AdcValueHolderErrorCode::ERROR_VALUE_IS_NOT_VALID);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public:
|
||||
using AdcValueHolder::AdcValueHolder;
|
||||
|
||||
virtual ~AdcSerializingValueHolder() = default;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user