mirror of
https://github.com/getml/sqlgen.git
synced 2026-01-09 02:49:40 -06:00
This commit is contained in:
committed by
GitHub
parent
1bfc4e472b
commit
3076ea2c8c
@@ -11,26 +11,36 @@
|
||||
namespace sqlgen::transpilation {
|
||||
|
||||
template <class T>
|
||||
dynamic::Value to_value(const T& _t) {
|
||||
using Type = std::remove_cvref_t<T>;
|
||||
if constexpr (std::is_floating_point_v<Type>) {
|
||||
return dynamic::Value{dynamic::Float{.val = static_cast<double>(_t)}};
|
||||
struct ToValue;
|
||||
|
||||
} else if constexpr (std::is_integral_v<Type>) {
|
||||
return dynamic::Value{dynamic::Integer{.val = static_cast<int64_t>(_t)}};
|
||||
template <class T>
|
||||
struct ToValue {
|
||||
dynamic::Value operator()(const T& _t) const {
|
||||
using Type = std::remove_cvref_t<T>;
|
||||
if constexpr (std::is_floating_point_v<Type>) {
|
||||
return dynamic::Value{dynamic::Float{.val = static_cast<double>(_t)}};
|
||||
|
||||
} else if constexpr (std::is_convertible_v<Type, std::string>) {
|
||||
return dynamic::Value{dynamic::String{.val = std::string(_t)}};
|
||||
} else if constexpr (std::is_integral_v<Type>) {
|
||||
return dynamic::Value{dynamic::Integer{.val = static_cast<int64_t>(_t)}};
|
||||
|
||||
} else if constexpr (has_reflection_method<Type>) {
|
||||
return to_value(_t.reflection());
|
||||
} else if constexpr (std::is_convertible_v<Type, std::string>) {
|
||||
return dynamic::Value{dynamic::String{.val = std::string(_t)}};
|
||||
|
||||
} else if constexpr (std::is_enum_v<Type>) {
|
||||
return dynamic::Value{dynamic::String{.val = rfl::enum_to_string(_t)}};
|
||||
} else if constexpr (has_reflection_method<Type>) {
|
||||
return ToValue<typename Type::ReflectionType>{}(_t.reflection());
|
||||
|
||||
} else {
|
||||
static_assert(rfl::always_false_v<T>, "Unsupported type");
|
||||
} else if constexpr (std::is_enum_v<Type>) {
|
||||
return dynamic::Value{dynamic::String{.val = rfl::enum_to_string(_t)}};
|
||||
|
||||
} else {
|
||||
static_assert(rfl::always_false_v<T>, "Unsupported type");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <class T>
|
||||
dynamic::Value to_value(const T& _t) {
|
||||
return ToValue<std::remove_cvref_t<T>>{}(_t);
|
||||
}
|
||||
|
||||
} // namespace sqlgen::transpilation
|
||||
|
||||
Reference in New Issue
Block a user