blob: c1978136738ded1a73d372d5f868193a4abd14b6 [file] [log] [blame]
// Copyright 2018 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 "garnet/bin/zxdb/client/setting_value.h"
#include <algorithm>
#include <vector>
#include "lib/fxl/logging.h"
#include "lib/fxl/macros.h"
namespace zxdb {
const char* SettingTypeToString(SettingType type) {
switch (type) {
case SettingType::kBoolean:
return "bool";
case SettingType::kInteger:
return "int";
case SettingType::kString:
return "string";
case SettingType::kList:
return "list";
case SettingType::kNull:
return "<null>";
}
}
SettingValue::SettingValue() = default;
SettingValue::SettingValue(bool val)
: type_(SettingType::kBoolean), value_(val) {}
SettingValue::SettingValue(int val)
: type_(SettingType::kInteger), value_(val) {}
SettingValue::SettingValue(const char* val)
: type_(SettingType::kString), value_(std::string(val)) {}
SettingValue::SettingValue(std::string val)
: type_(SettingType::kString), value_(val) {}
SettingValue::SettingValue(std::vector<std::string> val)
: type_(SettingType::kList), value_(std::move(val)) {}
bool& SettingValue::GetBool() {
FXL_DCHECK(type_ == SettingType::kBoolean);
return std::get<bool>(value_);
}
bool SettingValue::GetBool() const {
return const_cast<SettingValue*>(this)->GetBool();
}
int& SettingValue::GetInt() {
FXL_DCHECK(type_ == SettingType::kInteger);
return std::get<int>(value_);
}
int SettingValue::GetInt() const {
return const_cast<SettingValue*>(this)->GetInt();
}
std::string& SettingValue::GetString() {
FXL_DCHECK(type_ == SettingType::kString);
return std::get<std::string>(value_);
}
const std::string& SettingValue::GetString() const {
FXL_DCHECK(type_ == SettingType::kString);
return std::get<std::string>(value_);
}
std::vector<std::string>& SettingValue::GetList() {
FXL_DCHECK(type_ == SettingType::kList);
return std::get<std::vector<std::string>>(value_);
}
const std::vector<std::string>& SettingValue::GetList() const {
FXL_DCHECK(type_ == SettingType::kList);
return std::get<std::vector<std::string>>(value_);
}
} // namespace zxdb