in src/ds/json_schema.h [91:185]
inline std::string schema_name()
{
if constexpr (nonstd::is_specialization<T, std::optional>::value)
{
return schema_name<typename T::value_type>();
}
else if constexpr (nonstd::is_specialization<T, std::vector>::value)
{
if constexpr (std::is_same<T, std::vector<uint8_t>>::value)
{
// Byte vectors are always base64 encoded
return "base64string";
}
else
{
return fmt::format("{}_array", schema_name<typename T::value_type>());
}
}
else if constexpr (
nonstd::is_specialization<T, std::map>::value ||
nonstd::is_specialization<T, std::unordered_map>::value)
{
return fmt::format(
"{}_to_{}",
schema_name<typename T::key_type>(),
schema_name<typename T::mapped_type>());
}
else if constexpr (nonstd::is_specialization<T, std::pair>::value)
{
return fmt::format(
"{}_and_{}",
schema_name<typename T::first_type>(),
schema_name<typename T::second_type>());
}
else if constexpr (std::is_same<T, std::string>::value)
{
return "string";
}
else if constexpr (std::is_same<T, bool>::value)
{
return "boolean";
}
else if constexpr (std::is_same<T, uint8_t>::value)
{
return "uint8";
}
else if constexpr (std::is_same<T, uint16_t>::value)
{
return "uint16";
}
else if constexpr (std::is_same<T, uint32_t>::value)
{
return "uint32";
}
else if constexpr (std::is_same<T, uint64_t>::value)
{
return "uint64";
}
else if constexpr (std::is_same<T, int8_t>::value)
{
return "int8";
}
else if constexpr (std::is_same<T, int16_t>::value)
{
return "int16";
}
else if constexpr (std::is_same<T, int32_t>::value)
{
return "int32";
}
else if constexpr (std::is_same<T, int64_t>::value)
{
return "int64";
}
else if constexpr (std::is_same<T, float>::value)
{
return "float";
}
else if constexpr (std::is_same<T, double>::value)
{
return "double";
}
else if constexpr (std::is_same<T, nlohmann::json>::value)
{
return "json";
}
else if constexpr (std::is_same<T, JsonSchema>::value)
{
return "json_schema";
}
else
{
return adl::schema_name<T>();
}
}