Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
ValidationResult.hpp
Go to the documentation of this file.
1#pragma once
2
9
10#include <string>
11#include <vector>
12
13namespace icarus {
14
23
29 std::string message;
30 std::string context;
31
32 ValidationIssue(ValidationSeverity sev, std::string msg, std::string ctx = "")
33 : severity(sev), message(std::move(msg)), context(std::move(ctx)) {}
34
36 [[nodiscard]] bool IsError() const { return severity == ValidationSeverity::Error; }
37};
38
59 public:
60 ValidationResult() = default;
61
63 [[nodiscard]] bool IsValid() const {
64 for (const auto &issue : issues_) {
65 if (issue.IsError()) {
66 return false;
67 }
68 }
69 return true;
70 }
71
73 [[nodiscard]] std::vector<std::string> GetErrors() const {
74 std::vector<std::string> errors;
75 for (const auto &issue : issues_) {
76 if (issue.severity == ValidationSeverity::Error) {
77 errors.push_back(FormatIssue(issue));
78 }
79 }
80 return errors;
81 }
82
84 [[nodiscard]] std::vector<std::string> GetWarnings() const {
85 std::vector<std::string> warnings;
86 for (const auto &issue : issues_) {
87 if (issue.severity == ValidationSeverity::Warning) {
88 warnings.push_back(FormatIssue(issue));
89 }
90 }
91 return warnings;
92 }
93
95 [[nodiscard]] std::vector<std::string> GetInfos() const {
96 std::vector<std::string> infos;
97 for (const auto &issue : issues_) {
98 if (issue.severity == ValidationSeverity::Info) {
99 infos.push_back(FormatIssue(issue));
100 }
101 }
102 return infos;
103 }
104
106 [[nodiscard]] const std::vector<ValidationIssue> &GetIssues() const { return issues_; }
107
109 void AddError(const std::string &message, const std::string &context = "") {
110 issues_.emplace_back(ValidationSeverity::Error, message, context);
111 }
112
114 void AddWarning(const std::string &message, const std::string &context = "") {
115 issues_.emplace_back(ValidationSeverity::Warning, message, context);
116 }
117
119 void AddInfo(const std::string &message, const std::string &context = "") {
120 issues_.emplace_back(ValidationSeverity::Info, message, context);
121 }
122
124 [[nodiscard]] bool HasIssues() const { return !issues_.empty(); }
125
127 [[nodiscard]] size_t ErrorCount() const {
128 size_t count = 0;
129 for (const auto &issue : issues_) {
130 if (issue.IsError()) {
131 ++count;
132 }
133 }
134 return count;
135 }
136
138 [[nodiscard]] size_t WarningCount() const {
139 size_t count = 0;
140 for (const auto &issue : issues_) {
141 if (issue.severity == ValidationSeverity::Warning) {
142 ++count;
143 }
144 }
145 return count;
146 }
147
148 private:
149 std::vector<ValidationIssue> issues_;
150
151 [[nodiscard]] static std::string FormatIssue(const ValidationIssue &issue) {
152 if (issue.context.empty()) {
153 return issue.message;
154 }
155 return issue.message + " [" + issue.context + "]";
156 }
157};
158
159} // namespace icarus
Base class for all Icarus exceptions.
Definition Error.hpp:52
std::vector< std::string > GetInfos() const
Get all info messages.
Definition ValidationResult.hpp:95
std::vector< std::string > GetErrors() const
Get all error messages.
Definition ValidationResult.hpp:73
void AddWarning(const std::string &message, const std::string &context="")
Add a warning.
Definition ValidationResult.hpp:114
size_t WarningCount() const
Get warning count.
Definition ValidationResult.hpp:138
const std::vector< ValidationIssue > & GetIssues() const
Get all issues.
Definition ValidationResult.hpp:106
bool IsValid() const
Check if validation passed (no errors).
Definition ValidationResult.hpp:63
void AddInfo(const std::string &message, const std::string &context="")
Add an info message.
Definition ValidationResult.hpp:119
std::vector< std::string > GetWarnings() const
Get all warning messages.
Definition ValidationResult.hpp:84
size_t ErrorCount() const
Get error count.
Definition ValidationResult.hpp:127
void AddError(const std::string &message, const std::string &context="")
Add an error.
Definition ValidationResult.hpp:109
bool HasIssues() const
Check if there are any issues at all.
Definition ValidationResult.hpp:124
Definition AggregationTypes.hpp:13
ValidationSeverity
Severity level for validation issues.
Definition ValidationResult.hpp:18
@ Warning
Proceed with caution.
Definition ValidationResult.hpp:20
@ Info
Informational note.
Definition ValidationResult.hpp:21
@ Error
Fatal - operation cannot proceed.
Definition ValidationResult.hpp:19
Single validation issue.
Definition ValidationResult.hpp:27
std::string context
Additional context (e.g., signal name).
Definition ValidationResult.hpp:30
bool IsError() const
Check if this issue is an error.
Definition ValidationResult.hpp:36
ValidationSeverity severity
Definition ValidationResult.hpp:28
ValidationIssue(ValidationSeverity sev, std::string msg, std::string ctx="")
Definition ValidationResult.hpp:32
std::string message
Definition ValidationResult.hpp:29