--- /dev/null
+#ifndef XAPP_MODEL_ModelBase_H
+#define XAPP_MODEL_ModelBase_H
+#include <iostream>
+#include <string.h>
+#include <nlohmann/json.hpp>
+#include <nlohmann/json-schema.hpp>
+#include <type_traits>
+
+using nlohmann::json_schema::json_validator;
+using json = nlohmann::json;
+
+namespace xapp {
+namespace model {
+
+std::invalid_argument invalid_parameter("Invalid Json Input");
+
+template<typename ModelType>
+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*/