blob: 805fab67e271dbb1b3282a2b23b32e12d38098a9 [file] [log] [blame]
// Copyright 2022 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 LIB_SYS_INSPECT_TREE_HANDLER_SETTINGS_H_
#define LIB_SYS_INSPECT_TREE_HANDLER_SETTINGS_H_
#include <lib/stdcompat/optional.h>
namespace inspect {
// TreeServerSendPreference describes how the VMO should be served.
class TreeServerSendPreference {
public:
// Default behavior is to send a Frozen VMO; on failure, it will send a Live VMO.
TreeServerSendPreference() = default;
enum class Type {
Frozen,
Live,
DeepCopy,
};
// Freeze the VMO if possible. On failure, do `failure`.
// `failure` should not be Type::Frozen.
static constexpr TreeServerSendPreference Frozen(Type failure) {
return TreeServerSendPreference(Type::Frozen, failure);
}
// Send a live VMO.
static constexpr TreeServerSendPreference Live() {
return TreeServerSendPreference(Type::Live, cpp17::nullopt);
}
// Send a true copy of the VMO.
static constexpr TreeServerSendPreference DeepCopy() {
return TreeServerSendPreference(Type::DeepCopy, cpp17::nullopt);
}
constexpr Type PrimaryBehavior() { return primary_send_type_; }
constexpr cpp17::optional<Type> FailureBehavior() { return failure_behavior_; }
private:
explicit constexpr TreeServerSendPreference(Type primary, cpp17::optional<Type> failure)
: primary_send_type_(primary), failure_behavior_(failure) {}
const Type primary_send_type_ = Type::Frozen;
const cpp17::optional<Type> failure_behavior_ = Type::Live;
};
struct TreeHandlerSettings {
// Control the way a VMO is served for snapshotting.
TreeServerSendPreference snapshot_behavior;
};
} // namespace inspect
#endif // LIB_SYS_INSPECT_TREE_HANDLER_SETTINGS_H_