diff --git a/include/mcc/mcc_pcm.h b/include/mcc/mcc_pcm.h index 5a0cacd..4838f21 100644 --- a/include/mcc/mcc_pcm.h +++ b/include/mcc/mcc_pcm.h @@ -21,6 +21,8 @@ #include "mcc_concepts.h" #include "mcc_coordinate.h" +#include "mcc_deserializer.h" +#include "mcc_serializer.h" namespace mcc::impl { @@ -131,6 +133,48 @@ static constexpr std::string_view mccDefaultPCMTypeString(MccDefaultPCMType type : "UNKNOWN"; } +template <> +struct MccSerializer : MccSerializerBase { + constexpr static std::string_view serializerName{"MCC-DEFAULT-PCMTYPE-SERIALIZER"}; + + template + error_t operator()(traits::mcc_output_char_range auto& output, + MccDefaultPCMType const& value, + ParamsT const& params = mcc_serialization_params_t{}) + { + std::ranges::copy(mccDefaultPCMTypeString(value), std::back_inserter(output)); + + return MccSerializerErrorCode::ERROR_OK; + } +}; + +template <> +struct MccDeserializer : MccDeserializerBase { + static constexpr std::string_view deserializerName{"MCC-COORD-EPOCH-DESERIALIZER"}; + + template + error_t operator()(traits::mcc_input_char_range auto const& input, + MccDefaultPCMType& value, + ParamsT const& params = mcc_serialization_params_t{}) + { + auto s = mcc::utils::trimSpaces(input); + + if (s == mcc::impl::MccDefaultPCMTypeString) { + value = mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY; + } else if (s == mcc::impl::MccDefaultPCMTypeString) { + value = mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY; + } else if (s == mcc::impl::MccDefaultPCMTypeString) { + value = mcc::impl::MccDefaultPCMType::PCM_TYPE_BSPLINE; + } else { + return MccDeserializerErrorCode::ERROR_INVALID_SERIALIZED_VALUE; + } + + + return MccDeserializerErrorCode::ERROR_OK; + } +}; + + template class MccDefaultPCM : public mcc_pcm_interface_t {