wiRedPanda
Logic Circuit Simulator
Loading...
Searching...
No Matches
MCPValidator.h
Go to the documentation of this file.
1// Copyright 2015 - 2026, GIBIS-UNIFESP and the wiRedPanda contributors
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <memory>
7#include <string>
8#include <unordered_map>
9
10#include <nlohmann/json-schema.hpp>
11#include <nlohmann/json.hpp>
12#include <QJsonObject>
13#include <QString>
14
15using json = nlohmann::json;
16using nlohmann::json_schema::json_validator;
17
23{
24 bool isValid = false;
25 QString errorMessage;
26 QString schemaUsed;
27 QString commandType;
28 QString errorPath;
29
30 ValidationResult() = default;
31 ValidationResult(bool valid, const QString &error = QString(), const QString &schema = QString(),
32 const QString &command = QString(), const QString &path = QString())
33 : isValid(valid)
34 , errorMessage(error)
35 , schemaUsed(schema)
36 , commandType(command)
37 , errorPath(path)
38 {
39 }
40};
41
49{
50public:
51 explicit MCPValidator(const QString &schemaPath);
53
54 // Core validation methods
55 ValidationResult validateCommand(const QJsonObject &command);
57 ValidationResult validateResponse(const QJsonObject &response, const QString &expectedCommand = QString());
58 ValidationResult validateResponse(const json &response, const QString &expectedCommand = QString());
59
60 // Schema management
61 bool isSchemaLoaded() const;
62 QString schemaPath() const;
63
64 // Utility methods
65 static json qjsonToNlohmann(const QJsonObject &qjson);
66 static QJsonObject nlohmannToQJson(const json &nlohmannJson);
67
68 // Schema introspection (used by describe_command)
69 json findCommandSchema(const QString &commandName) const;
70 json findResponseSchema(const QString &commandName) const;
71
72private:
74 bool loadSchema(const QString &schemaPath);
75
76 // Internal validation methods
77 ValidationResult validateAgainstSchema(const json &data, const json &schema, const QString &commandType, const std::string &cacheKey);
78 QString extractErrorPath(const QString &errorMsg);
79
80 // Member variables
81 json m_schema;
82 json m_commandSchemas;
83 json m_responseSchemas;
84 std::unique_ptr<json_validator> m_validator;
88 std::unordered_map<std::string, std::unique_ptr<json_validator>> m_validatorCache;
89 QString m_schemaPath;
90 bool m_schemaLoaded = false;
91};
nlohmann::json json
static json qjsonToNlohmann(const QJsonObject &qjson)
ValidationResult validateCommand(const QJsonObject &command)
json findResponseSchema(const QString &commandName) const
MCPValidator(const QString &schemaPath)
static QJsonObject nlohmannToQJson(const json &nlohmannJson)
QString schemaPath() const
bool isSchemaLoaded() const
ValidationResult validateResponse(const QJsonObject &response, const QString &expectedCommand=QString())
json findCommandSchema(const QString &commandName) const
Result of JSON schema validation.
ValidationResult(bool valid, const QString &error=QString(), const QString &schema=QString(), const QString &command=QString(), const QString &path=QString())
ValidationResult()=default