# Response

> The sequence of channel responses that answers the channel, what ends it, and what a finish with nothing before it means.

Canonical: https://protocol.diverge.network/2.3.0/endpoints/volumes-fuse-serve/client/truncate/response/
Specification revision: 2.3.0

```text
[0]             ok
[1][message …]  an error, UTF-8
[2]             read only: the volume is read only
```

- **The sequence.** Exactly one channel response, ok, read only, or an error, followed
  by the channel response finish.
- **The message.** The bytes after the error byte are UTF-8, not JSON.
- **Read only.** The byte `2` states that the volume's `mode` is
  `read_only`: the change is refused, and the volume is as it was.
- **A finish with nothing.** A channel response finish that no
  channel response precedes states that the server could not serve
  the ask. The client decides whether to ask again.

The channel response is defined by `diverge-sdk-rs/src/provider/endpoints/volumes/fuse_serve/server/channel_response/truncate/frame.rs`:

```rust
//! What a server's channel response frame carries on a truncate
//! channel of a FUSE serve.

/// Ok, read only, or why not. See [`fuse::truncate::response::Frame`](crate::shared::containers::fuse::truncate::response::Frame).
///
/// An alias rather than a re-export because this module is real: the
/// path says this scope's answer lives here, and it does, rather than
/// naming somewhere else and hoping a reader follows. What the alias
/// points at is right there in the signature.
pub type Frame<'a> = crate::shared::containers::fuse::truncate::response::Frame<'a>;
```
