103 return schema_name<typename T::value_type>();
107 if constexpr (std::is_same<T, std::vector<uint8_t>>::value)
110 return "base64string";
114 return fmt::format(
"{}_array", schema_name<typename T::value_type>());
121 return fmt::format(
"{}_set", schema_name<typename T::value_type>());
129 schema_name<typename T::key_type>(),
130 schema_name<typename T::mapped_type>());
136 schema_name<typename T::first_type>(),
137 schema_name<typename T::second_type>());
139 else if constexpr (std::is_same<T, std::string>::value)
143 else if constexpr (std::is_same<T, bool>::value)
147 else if constexpr (std::is_same<T, uint8_t>::value)
151 else if constexpr (std::is_same<T, uint16_t>::value)
155 else if constexpr (std::is_same<T, uint32_t>::value)
159 else if constexpr (std::is_same<T, uint64_t>::value)
163 else if constexpr (std::is_same<T, int8_t>::value)
167 else if constexpr (std::is_same<T, int16_t>::value)
171 else if constexpr (std::is_same<T, int32_t>::value)
175 else if constexpr (std::is_same<T, int64_t>::value)
179 else if constexpr (std::is_same<T, float>::value)
183 else if constexpr (std::is_same<T, double>::value)
187 else if constexpr (std::is_same<T, nlohmann::json>::value)
191 else if constexpr (std::is_same<T, JsonSchema>::value)
193 return "json_schema";
197 return adl::schema_name<T>();
206 fill_schema<typename T::value_type>(schema);
213 if constexpr (std::is_same<T, std::vector<uint8_t>>::value)
216 schema[
"type"] =
"string";
217 schema[
"format"] =
"base64";
221 schema[
"type"] =
"array";
222 schema[
"items"] = schema_element<typename T::value_type>();
232 if constexpr (nlohmann::detail::
233 is_compatible_object_type<nlohmann::json, T>::value)
235 schema[
"type"] =
"object";
236 schema[
"additionalProperties"] =
237 schema_element<typename T::mapped_type>();
241 schema[
"type"] =
"array";
242 auto items = nlohmann::json::object();
244 items[
"type"] =
"array";
246 auto sub_items = nlohmann::json::array();
247 sub_items.push_back(schema_element<typename T::key_type>());
248 sub_items.push_back(schema_element<typename T::mapped_type>());
249 items[
"items"] = sub_items;
251 schema[
"items"] = items;
256 schema[
"type"] =
"array";
257 auto items = nlohmann::json::array();
258 items.push_back(schema_element<typename T::first_type>());
259 items.push_back(schema_element<typename T::second_type>());
260 schema[
"items"] = items;
262 else if constexpr (std::is_same<T, std::string>::value)
264 schema[
"type"] =
"string";
266 else if constexpr (std::is_same<T, bool>::value)
268 schema[
"type"] =
"boolean";
270 else if constexpr (std::is_same<T, nlohmann::json>::value)
274 schema = nlohmann::json::object();
276 else if constexpr (std::is_integral<T>::value)
278 fill_number_schema<T>(schema);
280 else if constexpr (std::is_floating_point<T>::value)
282 schema[
"type"] =
"number";
284 else if constexpr (std::is_same<T, JsonSchema>::value)
286 schema[
"type"] =
"object";
290 adl::fill_schema<T>(schema);