libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
ancdetails.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/enums_anc.h>
14#include <promeki/json.h>
15#include <promeki/list.h>
16#include <promeki/namespace.h>
17#include <promeki/string.h>
18#include <promeki/stringlist.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
69class AncDetails {
70 public:
81 struct Issue {
83 AncDetailSeverity severity;
84
86 String message;
87
89 Issue() : severity(AncDetailSeverity::Info) {}
90
92 Issue(const AncDetailSeverity &sev, const String &msg)
93 : severity(sev), message(msg) {}
94
96 bool operator==(const Issue &o) const {
97 return severity == o.severity && message == o.message;
98 }
99
101 bool operator!=(const Issue &o) const { return !(*this == o); }
102 };
103
105 using IssueList = List<Issue>;
106
108 AncDetails() = default;
109
110 // -- Decoded lines ----------------------------------------
111
113 const StringList &lines() const { return _lines; }
114
116 void addLine(const String &line) { _lines.pushToBack(line); }
117
128 void addField(const String &name, const String &value) {
129 _lines.pushToBack(name + " = " + value);
130 }
131
132 // -- Issues -----------------------------------------------
133
135 const IssueList &issues() const { return _issues; }
136
138 void addIssue(const AncDetailSeverity &severity, const String &message) {
139 _issues.pushToBack(Issue(severity, message));
140 }
141
143 void addInfo(const String &message) { addIssue(AncDetailSeverity::Info, message); }
144
146 void addWarning(const String &message) { addIssue(AncDetailSeverity::Warning, message); }
147
149 void addError(const String &message) { addIssue(AncDetailSeverity::Error, message); }
150
152 size_t issueCount(const AncDetailSeverity &severity) const;
153
155 bool hasWarnings() const { return issueCount(AncDetailSeverity::Warning) > 0; }
156
158 bool hasErrors() const { return issueCount(AncDetailSeverity::Error) > 0; }
159
161 bool isEmpty() const { return _lines.isEmpty() && _issues.isEmpty(); }
162
163 // -- Comparison -------------------------------------------
164
166 bool operator==(const AncDetails &o) const {
167 return _lines == o._lines && _issues == o._issues;
168 }
169
171 bool operator!=(const AncDetails &o) const { return !(*this == o); }
172
173 // -- Rendering --------------------------------------------
174
183 String toString() const;
184
186 JsonObject toJson() const;
187
188 private:
189 StringList _lines;
190 IssueList _issues;
191};
192
193PROMEKI_NAMESPACE_END
194
195#endif // PROMEKI_ENABLE_PROAV