# inspect::TreeServerSendPreference

`#include <tree_handler_settings.h>`

[TreeServerSendPreference](https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference) describes how the Inspect VMO should be served.

## Summary

The server has a primary behavior and a failure behavior. These describe the way that the [Inspector](https://fuchsia.dev/reference/cpp/class/inspect/inspector#classinspect_1_1_inspector)'s VMO handle will be duplicated. The options in general are:

- Frozen: this is copy-on-write.
- Live: updates to the server side VMO propagate to the client. The client is read-only.
- DeepCopy: completely copies the VMO data into a new VMO.

<br />

The primary behavior is always configurable. By default, the primary behavior is Frozen.

The failure behavior is configurable when the primary behavior is Frozen. In that case, the failure behavior can be set to either Live or DeepCopy. The default is Live.

The ultimate fallback behavior is always to send a Live VMO.

| ### Constructors and Destructors ||
|---|---|
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1a9f6464f3fd3d5229602403596b2af093()` Default behavior is to send a Frozen VMO; on failure, it will send a Live VMO. ||

| ### Public types ||
|---|---|
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933{ https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933a68abcc3d0869f8a52c2b286b3c511dd3, https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933a955ad3298db330b5ee880c2c9e6f23a0, https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933a23040c3504c72283845bc72c485c79c4 }` | enumDefines the behavior of the VMO sent over this service. |

| ### Public functions ||
|---|---|
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1a6c8078900a33c224b9c1e4a2b67eaf09()` | `constexpr std::optional< https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933 >` |
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1a540bcd965d86d0f7ff0a15966bdb5a16()` | `constexpr https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933` |

| ### Public static functions ||
|---|---|
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa8b81263d2a9caf767831230b7e9d58e()` | `constexpr https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference` Send a true copy of the VMO. |
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aea248ef57d0b79c2c75b1c9ffaddd845(https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933 failure)` | `constexpr https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference` Freeze the VMO if possible. |
| `https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1a99284e8125b5910a14f7ccf89995658f()` | `constexpr https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference` Send a live VMO. |

## Public types

### Type

```c++
 Type
```
Defines the behavior of the VMO sent over this service.

| Properties ||
|---|---|
| `DeepCopy` | The VMO is fully copied before being sent. |
| `Frozen` | The VMO is copy-on-write. |
| `Live` | The VMO is a live reference to the original. Updates to the server side affect the client side. |

## Public functions

### FailureBehavior

```c++
constexpr std::optional< Type > FailureBehavior()
```

### PrimaryBehavior

```c++
constexpr Type PrimaryBehavior()
```

### TreeServerSendPreference

```c++
 TreeServerSendPreference()=default
```
Default behavior is to send a Frozen VMO; on failure, it will send a Live VMO.

## Public static functions

### DeepCopy

```c++
constexpr TreeServerSendPreference DeepCopy()
```
Send a true copy of the VMO.

### Frozen

```c++
constexpr TreeServerSendPreference Frozen(
  Type failure
)
```
Freeze the VMO if possible.

On failure, do `failure`. `failure` should not be [Type::Frozen](https://fuchsia.dev/reference/cpp/class/inspect/tree-server-send-preference#classinspect_1_1_tree_server_send_preference_1aa0a8b3cfc9a1487c422a8c08b8ac9933a68abcc3d0869f8a52c2b286b3c511dd3).

### Live

```c++
constexpr TreeServerSendPreference Live()
```
Send a live VMO.