blob: 4c0ebe0e1c0c0c3ab475ad01450770e3958adc69 [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.
#ifndef SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_SETTING_VALUE_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_SETTING_VALUE_H_
#include <string>
#include <variant>
#include <vector>
#include "src/developer/debug/zxdb/client/execution_scope.h"
#include "src/developer/debug/zxdb/symbols/input_location.h"
namespace zxdb {
enum class SettingType : uint32_t {
kBoolean = 0,
kInteger,
kString,
kList,
kExecutionScope,
kInputLocations,
kNull,
};
const char* SettingTypeToString(SettingType);
class SettingValue {
public:
SettingValue(); // Creates a kNull type.
explicit SettingValue(bool);
explicit SettingValue(int);
explicit SettingValue(const char*);
explicit SettingValue(std::string);
explicit SettingValue(std::vector<std::string>);
explicit SettingValue(ExecutionScope);
explicit SettingValue(std::vector<InputLocation>);
SettingType type() const { return type_; }
bool is_bool() const { return type_ == SettingType::kBoolean; }
bool is_int() const { return type_ == SettingType::kInteger; }
bool is_string() const { return type_ == SettingType::kString; }
bool is_list() const { return type_ == SettingType::kList; }
bool is_execution_scope() const { return type_ == SettingType::kExecutionScope; }
bool is_input_locations() const { return type_ == SettingType::kInputLocations; }
bool is_null() const { return type_ == SettingType::kNull; }
const auto& get_bool() const { return std::get<bool>(value_); }
const auto& get_int() const { return std::get<int>(value_); }
const auto& get_string() const { return std::get<std::string>(value_); }
const auto& get_list() const { return std::get<std::vector<std::string>>(value_); }
const auto& get_execution_scope() const { return std::get<ExecutionScope>(value_); }
const auto& get_input_locations() const { return std::get<std::vector<InputLocation>>(value_); }
void set_bool(bool v) { value_ = v; }
void set_int(int v) { value_ = v; }
void set_string(std::string v) { value_ = std::move(v); }
void set_list(std::vector<std::string> v) { value_ = std::move(v); }
void set_execution_scope(const ExecutionScope& s) { value_ = s; }
void set_input_locations(std::vector<InputLocation> v) { value_ = std::move(v); }
std::string ToDebugString() const;
using VariantValue = std::variant<bool, int, std::string, std::vector<std::string>,
ExecutionScope, std::vector<InputLocation>>;
private:
SettingType type_ = SettingType::kNull;
VariantValue value_;
};
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_SETTING_VALUE_H_