|
CCF
|
#include "ccf/crypto/base64.h"#include "ccf/ds/json_schema.h"#include <cstdint>#include <fmt/format.h>#include <fmt/ranges.h>#include <sstream>Go to the source code of this file.
Classes | |
| struct | ccf::JsonField< T > |
| class | ccf::JsonParseError |
Namespaces | |
| namespace | ccf |
| namespace | std |
| STL namespace. | |
Macros | |
| #define | FMT_HEADER_ONLY |
| #define | __FOR_JSON_COUNT_NN(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, N, ...) _FOR_JSON_##N |
| #define | _FOR_JSON_COUNT_NN_WITH_0(...) |
| #define | _FOR_JSON_COUNT_NN(...) _FOR_JSON_COUNT_NN_WITH_0(DUMMY, ##__VA_ARGS__) |
| #define | _FOR_JSON_0(POP_N) _FOR_JSON_0_##POP_N |
| #define | _FOR_JSON_1(POP_N) _FOR_JSON_1_##POP_N |
| #define | _FOR_JSON_2(POP_N) _FOR_JSON_2_##POP_N |
| #define | _FOR_JSON_3(POP_N) _FOR_JSON_3_##POP_N |
| #define | _FOR_JSON_4(POP_N) _FOR_JSON_4_##POP_N |
| #define | _FOR_JSON_5(POP_N) _FOR_JSON_5_##POP_N |
| #define | _FOR_JSON_6(POP_N) _FOR_JSON_6_##POP_N |
| #define | _FOR_JSON_7(POP_N) _FOR_JSON_7_##POP_N |
| #define | _FOR_JSON_8(POP_N) _FOR_JSON_8_##POP_N |
| #define | _FOR_JSON_9(POP_N) _FOR_JSON_9_##POP_N |
| #define | _FOR_JSON_10(POP_N) _FOR_JSON_10_##POP_N |
| #define | _FOR_JSON_11(POP_N) _FOR_JSON_11_##POP_N |
| #define | _FOR_JSON_12(POP_N) _FOR_JSON_12_##POP_N |
| #define | _FOR_JSON_13(POP_N) _FOR_JSON_13_##POP_N |
| #define | _FOR_JSON_14(POP_N) _FOR_JSON_14_##POP_N |
| #define | _FOR_JSON_15(POP_N) _FOR_JSON_15_##POP_N |
| #define | _FOR_JSON_16(POP_N) _FOR_JSON_16_##POP_N |
| #define | _FOR_JSON_17(POP_N) _FOR_JSON_17_##POP_N |
| #define | _FOR_JSON_18(POP_N) _FOR_JSON_18_##POP_N |
| #define | _FOR_JSON_19(POP_N) _FOR_JSON_19_##POP_N |
| #define | _FOR_JSON_20(POP_N) _FOR_JSON_20_##POP_N |
| #define | _FOR_JSON_21(POP_N) _FOR_JSON_21_##POP_N |
| #define | _FOR_JSON_22(POP_N) _FOR_JSON_22_##POP_N |
| #define | _FOR_JSON_23(POP_N) _FOR_JSON_23_##POP_N |
| #define | _FOR_JSON_24(POP_N) _FOR_JSON_24_##POP_N |
| #define | _FOR_JSON_25(POP_N) _FOR_JSON_25_##POP_N |
| #define | _FOR_JSON_26(POP_N) _FOR_JSON_26_##POP_N |
| #define | _FOR_JSON_27(POP_N) _FOR_JSON_27_##POP_N |
| #define | _FOR_JSON_28(POP_N) _FOR_JSON_28_##POP_N |
| #define | _FOR_JSON_29(POP_N) _FOR_JSON_29_##POP_N |
| #define | _FOR_JSON_30(POP_N) _FOR_JSON_30_##POP_N |
| #define | _FOR_JSON_0_POP1(FUNC, TYPE) |
| #define | _FOR_JSON_1_POP1(FUNC, TYPE, ARG1) _FOR_JSON_FINAL(FUNC, TYPE, ARG1) |
| #define | _FOR_JSON_2_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_3_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_4_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_5_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_6_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_7_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_8_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_9_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_10_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_11_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_12_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_13_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_14_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_15_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_16_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_17_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_18_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_19_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_20_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_21_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_22_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_23_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_24_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_25_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_26_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_27_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_28_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_29_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_30_POP1(FUNC, TYPE, ARG1, ...) |
| #define | _FOR_JSON_0_POP2(FUNC, TYPE) |
| #define | _FOR_JSON_1_POP2(FUNC, TYPE, ARG1) INVALID_ODD_ARGS |
| #define | _FOR_JSON_2_POP2(FUNC, TYPE, ARG1, ARG2) _FOR_JSON_FINAL(FUNC, TYPE, ARG1, ARG2) |
| #define | _FOR_JSON_3_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_4_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_5_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_6_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_7_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_8_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_9_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_10_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_11_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_12_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_13_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_14_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_15_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_16_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_17_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_18_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_19_POP2(FUNC, TYPE, ARG1, ARG2, ...) INVALID_ODD_ARGS |
| #define | _FOR_JSON_20_POP2(FUNC, TYPE, ARG1, ARG2, ...) |
| #define | _FOR_JSON_NEXT(FUNC, ...) FUNC##_FOR_JSON_NEXT(__VA_ARGS__) |
| #define | _FOR_JSON_FINAL(FUNC, ...) FUNC##_FOR_JSON_FINAL(__VA_ARGS__) |
| #define | WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | WRITE_REQUIRED_FOR_JSON_NEXT(TYPE, FIELD) WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | WRITE_REQUIRED_FOR_JSON_FINAL(TYPE, FIELD) WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define | WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | WRITE_OPTIONAL_FOR_JSON_NEXT(TYPE, FIELD) WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | WRITE_OPTIONAL_FOR_JSON_FINAL(TYPE, FIELD) WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define | READ_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | READ_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) READ_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | READ_REQUIRED_FOR_JSON_NEXT(TYPE, FIELD) READ_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | READ_REQUIRED_FOR_JSON_FINAL(TYPE, FIELD) READ_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define | READ_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | READ_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) READ_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | READ_OPTIONAL_FOR_JSON_NEXT(TYPE, FIELD) READ_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | READ_OPTIONAL_FOR_JSON_FINAL(TYPE, FIELD) READ_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define | FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | FILL_SCHEMA_REQUIRED_FOR_JSON_NEXT(TYPE, FIELD) FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | FILL_SCHEMA_REQUIRED_FOR_JSON_FINAL(TYPE, FIELD) FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define | FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | FILL_SCHEMA_OPTIONAL_FOR_JSON_NEXT(TYPE, FIELD) FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | FILL_SCHEMA_OPTIONAL_FOR_JSON_FINAL(TYPE, FIELD) FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_REQUIRED_FOR_JSON_NEXT(TYPE, FIELD) ADD_SCHEMA_COMPONENTS_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_REQUIRED_FOR_JSON_FINAL(TYPE, FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, C_FIELD, JSON_FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_OPTIONAL_FOR_JSON_NEXT(TYPE, FIELD) ADD_SCHEMA_COMPONENTS_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define | ADD_SCHEMA_COMPONENTS_OPTIONAL_FOR_JSON_FINAL(TYPE, FIELD) |
| #define | JSON_FIELD_FOR_JSON_NEXT(TYPE, FIELD) ccf::JsonField<decltype(TYPE::FIELD)>{#FIELD}, |
| #define | JSON_FIELD_FOR_JSON_FINAL(TYPE, FIELD) |
| #define | NESTED_PRAGMA(arg) _Pragma(arg) |
| #define | REQUIRES_SEMICOLON_TERMINATION static_assert(true, "Semicolon required after macro") |
| #define | DECLARE_JSON_TYPE_IMPL(TYPE, PRE_TO_JSON, POST_TO_JSON, PRE_FROM_JSON, POST_FROM_JSON, PRE_FILL_SCHEMA, POST_FILL_SCHEMA, PRE_ADD_SCHEMA, POST_ADD_SCHEMA) |
| #define | DECLARE_JSON_TYPE(TYPE) DECLARE_JSON_TYPE_IMPL(TYPE, , , , , , , , ) |
| #define | DECLARE_JSON_TYPE_WITH_BASE(TYPE, BASE) |
| #define | DECLARE_JSON_TYPE_WITH_2BASES(TYPE, BASE1, BASE2) |
| #define | DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE) |
| #define | DECLARE_JSON_TYPE_WITH_BASE_AND_OPTIONAL_FIELDS(TYPE, BASE) |
| #define | DECLARE_JSON_REQUIRED_FIELDS(TYPE, ...) |
| #define | DECLARE_JSON_REQUIRED_FIELDS_WITH_RENAMES(TYPE, ...) |
| #define | DECLARE_JSON_OPTIONAL_FIELDS(TYPE, ...) |
| #define | DECLARE_JSON_OPTIONAL_FIELDS_WITH_RENAMES(TYPE, ...) |
| #define | DECLARE_JSON_ENUM(TYPE, ...) |
Functions | |
| template<typename T > | |
| void | std::to_json (nlohmann::json &j, const std::optional< T > &t) |
| template<typename T > | |
| void | std::from_json (const nlohmann::json &j, std::optional< T > &t) |
| template<typename T > | |
| void | std::to_json (nlohmann::json &j, const std::vector< T > &t) |
| template<typename T > | |
| void | std::from_json (const nlohmann::json &j, std::vector< T > &t) |
| #define __FOR_JSON_COUNT_NN | ( | _0, | |
| _1, | |||
| _2, | |||
| _3, | |||
| _4, | |||
| _5, | |||
| _6, | |||
| _7, | |||
| _8, | |||
| _9, | |||
| _10, | |||
| _11, | |||
| _12, | |||
| _13, | |||
| _14, | |||
| _15, | |||
| _16, | |||
| _17, | |||
| _18, | |||
| _19, | |||
| _20, | |||
| _21, | |||
| _22, | |||
| _23, | |||
| _24, | |||
| _25, | |||
| _26, | |||
| _27, | |||
| _28, | |||
| _29, | |||
| _30, | |||
| N, | |||
| ... | |||
| ) | _FOR_JSON_##N |
| #define _FOR_JSON_0 | ( | POP_N | ) | _FOR_JSON_0_##POP_N |
| #define _FOR_JSON_0_POP1 | ( | FUNC, | |
| TYPE | |||
| ) |
| #define _FOR_JSON_0_POP2 | ( | FUNC, | |
| TYPE | |||
| ) |
| #define _FOR_JSON_1 | ( | POP_N | ) | _FOR_JSON_1_##POP_N |
| #define _FOR_JSON_10 | ( | POP_N | ) | _FOR_JSON_10_##POP_N |
| #define _FOR_JSON_10_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_10_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_11 | ( | POP_N | ) | _FOR_JSON_11_##POP_N |
| #define _FOR_JSON_11_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_11_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_12 | ( | POP_N | ) | _FOR_JSON_12_##POP_N |
| #define _FOR_JSON_12_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_12_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_13 | ( | POP_N | ) | _FOR_JSON_13_##POP_N |
| #define _FOR_JSON_13_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_13_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_14 | ( | POP_N | ) | _FOR_JSON_14_##POP_N |
| #define _FOR_JSON_14_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_14_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_15 | ( | POP_N | ) | _FOR_JSON_15_##POP_N |
| #define _FOR_JSON_15_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_15_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_16 | ( | POP_N | ) | _FOR_JSON_16_##POP_N |
| #define _FOR_JSON_16_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_16_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_17 | ( | POP_N | ) | _FOR_JSON_17_##POP_N |
| #define _FOR_JSON_17_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_17_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_18 | ( | POP_N | ) | _FOR_JSON_18_##POP_N |
| #define _FOR_JSON_18_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_18_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_19 | ( | POP_N | ) | _FOR_JSON_19_##POP_N |
| #define _FOR_JSON_19_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_19_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_1_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1 | |||
| ) | _FOR_JSON_FINAL(FUNC, TYPE, ARG1) |
| #define _FOR_JSON_1_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1 | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_2 | ( | POP_N | ) | _FOR_JSON_2_##POP_N |
| #define _FOR_JSON_20 | ( | POP_N | ) | _FOR_JSON_20_##POP_N |
| #define _FOR_JSON_20_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_20_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_21 | ( | POP_N | ) | _FOR_JSON_21_##POP_N |
| #define _FOR_JSON_21_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_22 | ( | POP_N | ) | _FOR_JSON_22_##POP_N |
| #define _FOR_JSON_22_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_23 | ( | POP_N | ) | _FOR_JSON_23_##POP_N |
| #define _FOR_JSON_23_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_24 | ( | POP_N | ) | _FOR_JSON_24_##POP_N |
| #define _FOR_JSON_24_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_25 | ( | POP_N | ) | _FOR_JSON_25_##POP_N |
| #define _FOR_JSON_25_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_26 | ( | POP_N | ) | _FOR_JSON_26_##POP_N |
| #define _FOR_JSON_26_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_27 | ( | POP_N | ) | _FOR_JSON_27_##POP_N |
| #define _FOR_JSON_27_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_28 | ( | POP_N | ) | _FOR_JSON_28_##POP_N |
| #define _FOR_JSON_28_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_29 | ( | POP_N | ) | _FOR_JSON_29_##POP_N |
| #define _FOR_JSON_29_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_2_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_2_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2 | |||
| ) | _FOR_JSON_FINAL(FUNC, TYPE, ARG1, ARG2) |
| #define _FOR_JSON_3 | ( | POP_N | ) | _FOR_JSON_3_##POP_N |
| #define _FOR_JSON_30 | ( | POP_N | ) | _FOR_JSON_30_##POP_N |
| #define _FOR_JSON_30_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_3_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_3_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_4 | ( | POP_N | ) | _FOR_JSON_4_##POP_N |
| #define _FOR_JSON_4_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_4_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_5 | ( | POP_N | ) | _FOR_JSON_5_##POP_N |
| #define _FOR_JSON_5_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_5_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_6 | ( | POP_N | ) | _FOR_JSON_6_##POP_N |
| #define _FOR_JSON_6_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_6_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_7 | ( | POP_N | ) | _FOR_JSON_7_##POP_N |
| #define _FOR_JSON_7_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_7_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_8 | ( | POP_N | ) | _FOR_JSON_8_##POP_N |
| #define _FOR_JSON_8_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_8_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) |
| #define _FOR_JSON_9 | ( | POP_N | ) | _FOR_JSON_9_##POP_N |
| #define _FOR_JSON_9_POP1 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ... | |||
| ) |
| #define _FOR_JSON_9_POP2 | ( | FUNC, | |
| TYPE, | |||
| ARG1, | |||
| ARG2, | |||
| ... | |||
| ) | INVALID_ODD_ARGS |
| #define _FOR_JSON_COUNT_NN | ( | ... | ) | _FOR_JSON_COUNT_NN_WITH_0(DUMMY, ##__VA_ARGS__) |
| #define _FOR_JSON_COUNT_NN_WITH_0 | ( | ... | ) |
| #define _FOR_JSON_FINAL | ( | FUNC, | |
| ... | |||
| ) | FUNC##_FOR_JSON_FINAL(__VA_ARGS__) |
| #define _FOR_JSON_NEXT | ( | FUNC, | |
| ... | |||
| ) | FUNC##_FOR_JSON_NEXT(__VA_ARGS__) |
| #define ADD_SCHEMA_COMPONENTS_OPTIONAL_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) |
| #define ADD_SCHEMA_COMPONENTS_OPTIONAL_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | ADD_SCHEMA_COMPONENTS_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define ADD_SCHEMA_COMPONENTS_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define ADD_SCHEMA_COMPONENTS_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define ADD_SCHEMA_COMPONENTS_REQUIRED_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) |
| #define ADD_SCHEMA_COMPONENTS_REQUIRED_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | ADD_SCHEMA_COMPONENTS_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define ADD_SCHEMA_COMPONENTS_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define ADD_SCHEMA_COMPONENTS_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define DECLARE_JSON_ENUM | ( | TYPE, | |
| ... | |||
| ) |
| #define DECLARE_JSON_OPTIONAL_FIELDS | ( | TYPE, | |
| ... | |||
| ) |
| #define DECLARE_JSON_OPTIONAL_FIELDS_WITH_RENAMES | ( | TYPE, | |
| ... | |||
| ) |
| #define DECLARE_JSON_REQUIRED_FIELDS | ( | TYPE, | |
| ... | |||
| ) |
| #define DECLARE_JSON_REQUIRED_FIELDS_WITH_RENAMES | ( | TYPE, | |
| ... | |||
| ) |
| #define DECLARE_JSON_TYPE | ( | TYPE | ) | DECLARE_JSON_TYPE_IMPL(TYPE, , , , , , , , ) |
| #define DECLARE_JSON_TYPE_IMPL | ( | TYPE, | |
| PRE_TO_JSON, | |||
| POST_TO_JSON, | |||
| PRE_FROM_JSON, | |||
| POST_FROM_JSON, | |||
| PRE_FILL_SCHEMA, | |||
| POST_FILL_SCHEMA, | |||
| PRE_ADD_SCHEMA, | |||
| POST_ADD_SCHEMA | |||
| ) |
Defines from_json, to_json, fill_json_schema, schema_name and add_schema_components functions for struct/class types, converting member fields to JSON elements and populating schema documents describing this transformation. Missing elements will cause errors to be raised. This assumes that from_json, to_json, are implemented for each member field type, either manually or through these macros. Additionally, you will need schema_name, fill_json_schema, and add_schema_components to be defined for OpenAPI schema generation. // clang-format off ie, the following must compile, for each foo in T: T t; nlohmann::json j, schema; j["foo"] = t.foo; t.foo = j["foo"].get<decltype(T::foo)>(); fill_json_schema(schema, t); std::string s = schema_name(t.foo); // clang-format on
Optional fields will be inserted into the JSON object iff their value differs from the value in a default-constructed instance of T. So if optional fields are present, then T must be default-constructible and the optional fields must be distinguishable (have operator!= defined)
To use:
Examples: struct X { int a, b; }; DECLARE_JSON_TYPE(X) DECLARE_JSON_REQUIRED_FIELDS(X, a, b)
Valid JSON: { "a": 42, "b": 100 } { "a": 42, "b": 100, "Unused": ["Anything"] } Invalid JSON: {} { "a": 42 } { "a": 42, "b": "Hello world" }
struct Y { bool c; std::string d; }; DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(Y) DECLARE_JSON_REQUIRED_FIELDS(Y, c) DECLARE_JSON_OPTIONAL_FIELDS(Y, d)
Valid JSON: { "c": true } { "c": false, "d": "Hello" } Invalid JSON: { "d": "Hello" }
struct X_A : X { int m; }; DECLARE_JSON_TYPE_WITH_BASE(X_A, X) DECLARE_JSON_REQUIRED_FIELDS(X_A, m)
Valid JSON: { "a": 42, "b": 100, "m": 101 } Invalid JSON: { "a": 42, "b": 100 } { "m": 101 }
struct X_B : X { int n; }; DECLARE_JSON_TYPE_WITH_BASE_AND_OPTIONAL_FIELDS(X_B, X) DECLARE_JSON_REQUIRED_FIELDS(X_B) // NO additional required fields DECLARE_JSON_OPTIONAL_FIELDS(X_B, n)
Valid JSON: { "a": 42, "b": 100 } { "a": 42, "b": 100, "n": 101 } Invalid JSON: { "n": 101 }
struct Z { int snake_case; std::string s; }; DECLARE_JSON_TYPE(Z); DECLARE_JSON_REQUIRED_FIELDS_WITH_RENAMES( Z, snake_case, camelCase, s, msg);
Valid JSON: { "camelCase": 42, "msg": "Hello" } (converts to and from struct {snake_case: 42, s: "Hello"})
| #define DECLARE_JSON_TYPE_WITH_2BASES | ( | TYPE, | |
| BASE1, | |||
| BASE2 | |||
| ) |
| #define DECLARE_JSON_TYPE_WITH_BASE | ( | TYPE, | |
| BASE | |||
| ) |
| #define DECLARE_JSON_TYPE_WITH_BASE_AND_OPTIONAL_FIELDS | ( | TYPE, | |
| BASE | |||
| ) |
| #define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS | ( | TYPE | ) |
| #define FILL_SCHEMA_OPTIONAL_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) | FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define FILL_SCHEMA_OPTIONAL_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) | FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define FILL_SCHEMA_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define FILL_SCHEMA_REQUIRED_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) | FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define FILL_SCHEMA_REQUIRED_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) | FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define FILL_SCHEMA_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define FMT_HEADER_ONLY |
| #define JSON_FIELD_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) |
| #define JSON_FIELD_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | ccf::JsonField<decltype(TYPE::FIELD)>{#FIELD}, |
| #define NESTED_PRAGMA | ( | arg | ) | _Pragma(arg) |
| #define READ_OPTIONAL_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) | READ_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define READ_OPTIONAL_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | READ_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define READ_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) | READ_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define READ_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define READ_REQUIRED_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) | READ_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define READ_REQUIRED_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | READ_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define READ_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) | READ_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define READ_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define REQUIRES_SEMICOLON_TERMINATION static_assert(true, "Semicolon required after macro") |
| #define WRITE_OPTIONAL_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) | WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define WRITE_OPTIONAL_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) | WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define WRITE_OPTIONAL_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |
| #define WRITE_REQUIRED_FOR_JSON_FINAL | ( | TYPE, | |
| FIELD | |||
| ) | WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL(TYPE, FIELD, #FIELD) |
| #define WRITE_REQUIRED_FOR_JSON_NEXT | ( | TYPE, | |
| FIELD | |||
| ) | WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, FIELD, #FIELD) |
| #define WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_FINAL | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) | WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT(TYPE, C_FIELD, JSON_FIELD) |
| #define WRITE_REQUIRED_WITH_RENAMES_FOR_JSON_NEXT | ( | TYPE, | |
| C_FIELD, | |||
| JSON_FIELD | |||
| ) |