#ifndef XAPP_MODEL_ModelBase_H #define XAPP_MODEL_ModelBase_H #include #include #include #include #include using nlohmann::json_schema::json_validator; using json = nlohmann::json; namespace xapp { namespace model { std::invalid_argument invalid_parameter("Invalid Json Input"); template bool _validate(const ModelType model) { json _json = model; json_validator validator; validator.set_root_schema(model.validator_schema); try { validator.validate(_json); } catch (const std::exception& e) { std::cerr << "Struct Validation failed, here is why: " << e.what() << "\n"; throw; } return true; } struct ModelBase { json validator_schema = R"( { "$schema": "http://json-schema.org/draft-07/schema#", "title": "ModelBase" })"_json; bool validate_() { return _validate(std::move(*this)); } void validate_json(const json& _json) { json_validator validator; validator.set_root_schema(get_validator_schema()); try { validator.validate(_json); } catch (const std::exception& e) { throw; } return; } virtual json get_validator_schema() const { return validator_schema; } }; void from_json(const json& j, ModelBase& ref) { return; } void to_json(json& j, const ModelBase& ref) { return; } } /*model*/ } /*xapp*/ #endif /*XAPP_MODEL_ModelBase_H*/