blob: 79a60fb763a45d923e013cdc376e9e643522abf0 [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 "logger_options.h"
#include "src/lib/fxl/strings/string_printf.h"
namespace netemul {
namespace config {
static const char* kEnabled = "enabled";
static const char* kKlogsEnabled = "klogs_enabled";
static const char* kFilters = "filters";
static const bool kDefaultEnabled = true;
static const bool kDefaultKlogsEnabled = false;
/*
* LoggerOptions
*
* public
*/
LoggerOptions::LoggerOptions() { SetDefaults(); }
bool LoggerOptions::ParseFromJSON(const rapidjson::Value& value, json::JSONParser* parser) {
if (value.IsNull()) {
SetDefaults();
return true;
}
if (!value.IsObject()) {
parser->ReportError("logger_options must be object type");
return false;
}
SetDefaults();
for (auto i = value.MemberBegin(); i != value.MemberEnd(); i++) {
if (i->name == kEnabled) {
if (!i->value.IsBool()) {
parser->ReportError("logger_options enabled must be a boolean value");
return false;
}
enabled_ = i->value.GetBool();
} else if (i->name == kKlogsEnabled) {
if (!i->value.IsBool()) {
parser->ReportError("logger_options klogs_enabled must be boolean value");
return false;
}
klogs_enabled_ = i->value.GetBool();
} else if (i->name == kFilters) {
if (!filters_.ParseFromJSON(i->value, parser)) {
return false;
}
} else {
parser->ReportError(
fxl::StringPrintf("Unrecognized logger_options member \"%s\"", i->name.GetString()));
return false;
}
}
return true;
}
void LoggerOptions::SetDefaults() {
enabled_ = kDefaultEnabled;
klogs_enabled_ = kDefaultKlogsEnabled;
filters_.SetDefaults();
}
void LoggerOptions::set_enabled(bool enabled) { enabled_ = enabled; }
bool LoggerOptions::enabled() const { return enabled_; }
bool LoggerOptions::klogs_enabled() const { return klogs_enabled_; }
const LoggerFilterOptions& LoggerOptions::filters() const { return filters_; }
} // namespace config
} // namespace netemul