#ifndef RFL_SNAKECASETOPASCALCASE_HPP_ #define RFL_SNAKECASETOPASCALCASE_HPP_ #include "Field.hpp" #include "internal/is_rename.hpp" #include "internal/transform_snake_case.hpp" namespace rfl { struct SnakeCaseToPascalCase { public: /// Replaces all instances of snake_case field names with PascalCase. template static auto process(const auto& _named_tuple) { const auto handle_one = [](const FieldType& _f) { if constexpr (FieldType::name() != "xml_content" && !internal::is_rename_v) { return handle_one_field(_f); } else { return _f; } }; return _named_tuple.transform(handle_one); } private: /// Applies the logic to a single field. template static auto handle_one_field(const FieldType& _f) { using NewFieldType = Field(), typename FieldType::Type>; return NewFieldType(_f.value()); } }; } // namespace rfl #endif