blob: 5808a1204bff4e8868065cf934d3fed78003642f [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#include "src/developer/exception_broker/json_utils.h"
#include <third_party/rapidjson/include/rapidjson/document.h>
#include <third_party/rapidjson/include/rapidjson/error/en.h>
#include "src/lib/syslog/cpp/logger.h"
namespace fuchsia {
namespace exception {
std::set<std::string> ExtractFilters(const std::string& content) {
rapidjson::Document document;
if (rapidjson::ParseResult result = document.Parse(content.c_str()); result.IsError()) {
FX_LOGS(ERROR) << "Parsing config as JSON at offset " << result.Offset() << ": "
<< rapidjson::GetParseError_En(result.Code());
return {};
}
if (!document.IsObject()) {
FX_LOGS(ERROR) << "Config json is not an object.";
return {};
}
if (!document.HasMember("filters"))
return {};
auto& filters = document["filters"];
if (!filters.IsArray()) {
FX_LOGS(WARNING) << "Filters member is not an array.";
return {};
}
std::set<std::string> result_filters;
for (uint32_t i = 0; i < filters.Size(); i++) {
auto& filter = filters[i];
if (!filter.IsString()) {
FX_LOGS(WARNING) << "Filter " << i << " is not a string.";
continue;
}
result_filters.insert(filter.GetString());
}
return result_filters;
}
} // namespace exception
} // namespace fuchsia