...
This commit is contained in:
parent
9a12ff0c27
commit
fd02bd2ad7
@ -282,20 +282,57 @@ static auto AdcCharRangeFromTuple(OutputR& res, const std::tuple<Ts...>& tp, Del
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*/
|
||||
template <traits::adc_output_char_range SerializedT = std::string>
|
||||
class AdcDefaultSerializer
|
||||
namespace details
|
||||
{
|
||||
std::string_view _delimiter;
|
||||
|
||||
template <typename DerivedT>
|
||||
class AdcDelimiter
|
||||
{
|
||||
public:
|
||||
template <traits::adc_input_char_range DT = std::string_view>
|
||||
AdcDefaultSerializer(const DT& delimiter = ",") : _delimiter(delimiter.begin(), delimiter.end())
|
||||
auto& setDelimiter(const DT& delimiter)
|
||||
{
|
||||
_delimiter = std::string{delimiter.begin(), delimiter.end()};
|
||||
|
||||
return static_cast<DerivedT&>(*this);
|
||||
}
|
||||
|
||||
auto& setDelimiter(const char* delimiter)
|
||||
{
|
||||
_delimiter = std::string{delimiter};
|
||||
|
||||
return static_cast<DerivedT&>(*this);
|
||||
}
|
||||
|
||||
protected:
|
||||
template <traits::adc_input_char_range DT = std::string_view>
|
||||
AdcDelimiter(const DT& delimiter = ",") : _delimiter(delimiter.begin(), delimiter.end())
|
||||
{
|
||||
}
|
||||
|
||||
AdcDefaultSerializer(const char* delimiter = ",") : _delimiter(delimiter) {}
|
||||
AdcDelimiter(const char* delimiter = ",") : _delimiter(delimiter) {}
|
||||
|
||||
virtual ~AdcDelimiter() = default;
|
||||
|
||||
std::string _delimiter;
|
||||
};
|
||||
|
||||
} // namespace details
|
||||
|
||||
/*
|
||||
*/
|
||||
template <traits::adc_output_char_range SerializedT = std::string>
|
||||
class AdcDefaultSerializer : public details::AdcDelimiter<AdcDefaultSerializer<SerializedT>>
|
||||
{
|
||||
std::string _delimiter;
|
||||
|
||||
using base_t = details::AdcDelimiter<AdcDefaultSerializer<SerializedT>>;
|
||||
|
||||
public:
|
||||
template <typename DT = std::string_view>
|
||||
AdcDefaultSerializer(const DT& delimiter = ",") : base_t(delimiter)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~AdcDefaultSerializer() = default;
|
||||
|
||||
@ -314,20 +351,40 @@ public:
|
||||
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
template <traits::adc_input_char_range DT = std::string_view>
|
||||
AdcDefaultSerializer& setDelimiter(const DT& delimiter)
|
||||
|
||||
/*
|
||||
*/
|
||||
template <traits::adc_input_char_range SerializedT = std::string>
|
||||
class AdcDefaultDeserializer : public details::AdcDelimiter<AdcDefaultDeserializer<SerializedT>>
|
||||
{
|
||||
std::string _delimiter;
|
||||
|
||||
using base_t = details::AdcDelimiter<AdcDefaultSerializer<SerializedT>>;
|
||||
|
||||
public:
|
||||
template <typename DT = std::string_view>
|
||||
AdcDefaultDeserializer(const DT& delimiter = ",") : base_t(delimiter)
|
||||
{
|
||||
_delimiter = std::string_view{delimiter.begin(), delimiter.end()};
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
AdcDefaultSerializer& setDelimiter(const char* delimiter)
|
||||
{
|
||||
_delimiter = std::string_view{delimiter};
|
||||
virtual ~AdcDefaultDeserializer() = default;
|
||||
|
||||
return *this;
|
||||
template <typename T>
|
||||
T deserialization(const SerializedT& value)
|
||||
{
|
||||
T res;
|
||||
|
||||
if constexpr (traits::adc_is_tuple_v<T>) {
|
||||
AdcTupleFromCharRange(res, value, _delimiter);
|
||||
} else if constexpr (traits::adc_output_char_range<T>) {
|
||||
AdcValuRangeFromCharRange(res, value, _delimiter);
|
||||
} else {
|
||||
res = AdcTrivialDeserializer<T>(value);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -433,12 +433,14 @@ AdcValueHolder make_arith_valueholder(GT&& getter,
|
||||
}
|
||||
|
||||
|
||||
// AdcValueHolder make_arith_valueholder(std::invocable<> auto&& getter,
|
||||
// std::invocable<const traits::adc_retval_t<decltype(getter)>&> auto&& setter)
|
||||
// {
|
||||
// return make_arith_valueholder(std::forward<decltype(getter)>(getter), std::forward<decltype(setter)>(setter),
|
||||
// AdcValueHolder::AdcValueHolderDummyValidator<traits::adc_retval_t<decltype(getter)>>);
|
||||
// }
|
||||
/* */
|
||||
|
||||
template <typename SerializedT = std::string>
|
||||
class AdcSerializingValueHolder : public AdcValueHolder
|
||||
{
|
||||
public:
|
||||
using AdcValueHolder::AdcValueHolder;
|
||||
};
|
||||
|
||||
|
||||
} // namespace adc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user