mcc_pcm.h: add serializer and deserializer of the MccDefaultPCM enum

This commit is contained in:
2026-05-19 17:24:14 +03:00
parent 8d36444c51
commit c5f17b7403

View File

@@ -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<MccDefaultPCMType> : MccSerializerBase {
constexpr static std::string_view serializerName{"MCC-DEFAULT-PCMTYPE-SERIALIZER"};
template <mcc_serialization_params_c ParamsT = mcc_serialization_params_t>
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<MccDefaultPCMType> : MccDeserializerBase {
static constexpr std::string_view deserializerName{"MCC-COORD-EPOCH-DESERIALIZER"};
template <mcc_serialization_params_c ParamsT = mcc_serialization_params_t>
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<mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY>) {
value = mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY;
} else if (s == mcc::impl::MccDefaultPCMTypeString<mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY_BSPLINE>) {
value = mcc::impl::MccDefaultPCMType::PCM_TYPE_GEOMETRY;
} else if (s == mcc::impl::MccDefaultPCMTypeString<mcc::impl::MccDefaultPCMType::PCM_TYPE_BSPLINE>) {
value = mcc::impl::MccDefaultPCMType::PCM_TYPE_BSPLINE;
} else {
return MccDeserializerErrorCode::ERROR_INVALID_SERIALIZED_VALUE;
}
return MccDeserializerErrorCode::ERROR_OK;
}
};
template <MccMountType MOUNT_TYPE>
class MccDefaultPCM : public mcc_pcm_interface_t<std::error_code>
{