11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
20PROMEKI_NAMESPACE_BEGIN
83 AncDetailSeverity severity;
89 Issue() : severity(AncDetailSeverity::Info) {}
92 Issue(
const AncDetailSeverity &sev,
const String &msg)
93 : severity(sev), message(msg) {}
96 bool operator==(
const Issue &o)
const {
97 return severity == o.severity && message == o.message;
101 bool operator!=(
const Issue &o)
const {
return !(*
this == o); }
105 using IssueList = List<Issue>;
108 AncDetails() =
default;
113 const StringList &lines()
const {
return _lines; }
116 void addLine(
const String &line) { _lines.pushToBack(line); }
128 void addField(
const String &name,
const String &value) {
129 _lines.pushToBack(name +
" = " + value);
135 const IssueList &issues()
const {
return _issues; }
138 void addIssue(
const AncDetailSeverity &severity,
const String &message) {
139 _issues.pushToBack(Issue(severity, message));
143 void addInfo(
const String &message) { addIssue(AncDetailSeverity::Info, message); }
146 void addWarning(
const String &message) { addIssue(AncDetailSeverity::Warning, message); }
149 void addError(
const String &message) { addIssue(AncDetailSeverity::Error, message); }
152 size_t issueCount(
const AncDetailSeverity &severity)
const;
155 bool hasWarnings()
const {
return issueCount(AncDetailSeverity::Warning) > 0; }
158 bool hasErrors()
const {
return issueCount(AncDetailSeverity::Error) > 0; }
161 bool isEmpty()
const {
return _lines.isEmpty() && _issues.isEmpty(); }
166 bool operator==(
const AncDetails &o)
const {
167 return _lines == o._lines && _issues == o._issues;
171 bool operator!=(
const AncDetails &o)
const {
return !(*
this == o); }
183 String toString()
const;
186 JsonObject toJson()
const;