blob: a9d1105d9bd609db252339e77803cbb0c8f5521e [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 "src/developer/debug/zxdb/client/setting_value.h"
#include <lib/syslog/cpp/macros.h>
#include <algorithm>
#include <vector>
#include <sstream>
#include "src/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::kExecutionScope:
return "scope";
case SettingType::kInputLocations:
return "locations";
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)) {}
SettingValue::SettingValue(ExecutionScope scope)
: type_(SettingType::kExecutionScope), value_(scope) {}
SettingValue::SettingValue(std::vector<InputLocation> v)
: type_(SettingType::kInputLocations), value_(std::move(v)) {}
std::string SettingValue::ToDebugString() const {
std::stringstream ss;
ss << "[" << SettingTypeToString(type_) << "]: ";
switch (type_) {
case SettingType::kNull:
return "<null>";
case SettingType::kBoolean:
ss << get_bool();
break;
case SettingType::kInteger:
ss << get_int();
break;
case SettingType::kString:
return get_string();
case SettingType::kExecutionScope:
// Scope formatting depends on the frontend. Currently we don't have a client-agnostic
// formatting for this.
return "<execution scope>";
case SettingType::kInputLocations:
// Input location formatting depends on the frontend. Currently we don't have a
// client-agnostic formatting for this.
return "<input locations>";
case SettingType::kList:
for (auto& v : get_list()) {
ss << v << ", ";
}
break;
}
return ss.str();
}
} // namespace zxdb