25#include "../common_types.hpp"
26#include "../runtime/struct.hpp"
29#include <unordered_set>
31namespace essence::meta::detail {
34 typename T::json_serialization;
35 requires std::is_enum_v<typename T::json_serialization>;
40 typename T::json_omission;
41 requires std::is_class_v<typename T::json_omission>;
61 consteval auto get_naming_convention_by_enum() noexcept {
62 return naming_convention::snake_case;
65 template <has_snake_case>
66 consteval auto get_naming_convention_by_enum() noexcept {
67 return naming_convention::snake_case;
70 template <has_camel_case>
71 consteval auto get_naming_convention_by_enum() noexcept {
72 return naming_convention::camel_case;
75 template <has_pascal_case>
76 consteval auto get_naming_convention_by_enum() noexcept {
77 return naming_convention::pascal_case;
81 requires std::is_class_v<T>
82 consteval naming_convention get_json_naming_convention() noexcept {
83 if constexpr (has_json_serialization_config<T>) {
84 return get_naming_convention_by_enum<typename T::json_serialization>();
86 return naming_convention::snake_case;
91 requires std::is_class_v<T>
92 bool check_json_omitted(std::string_view name) {
93 if constexpr (has_json_omission_config<T>) {
94 static const auto mapping = [] {
95 std::unordered_set<std::string_view> result;
97 for (
auto&& item : runtime::get_data_member_names<typename T::json_omission>()) {
104 return mapping.contains(name);