76inline std::optional<JsonEnvelope>
validateJsonEnvelope(
const QString& filePath,
const QLoggingCategory& category)
86 QFileInfo info(filePath);
88 qCWarning(category).nospace() <<
"Skipping " << filePath <<
": file size " << info.size() <<
" exceeds limit "
94 if (!file.open(QIODevice::ReadOnly)) {
95 qCWarning(category) <<
"Skipping unreadable file" << filePath <<
":" << file.errorString();
99 QJsonParseError parseError;
100 const QJsonDocument doc = QJsonDocument::fromJson(file.readAll(), &parseError);
101 if (parseError.error != QJsonParseError::NoError) {
102 qCWarning(category) <<
"Skipping malformed JSON" << filePath <<
":" << parseError.errorString();
105 if (!doc.isObject()) {
106 qCWarning(category) <<
"Skipping non-object root JSON in" << filePath;
110 QJsonObject root = doc.object();
112 const QString name = root.value(QLatin1String(
"name")).toString();
113 if (name.isEmpty()) {
114 qCWarning(category) <<
"Skipping" << filePath <<
": missing required 'name' field";
125 const QString basename = QFileInfo(filePath).completeBaseName();
126 if (name != basename) {
127 qCWarning(category).nospace() <<
"Skipping " << filePath <<
": name '" << name <<
"' does not match filename '"
128 << basename <<
"' — rejecting to avoid silent shadowing";
135 root.remove(QLatin1String(
"name"));
std::optional< JsonEnvelope > validateJsonEnvelope(const QString &filePath, const QLoggingCategory &category)
Validate the default envelope used by DirectoryLoader sinks.
Definition JsonEnvelopeValidator.h:76