# 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/container-proxy-endpoints/filesystem-fuse-serve/client/setattr/response/
Specification revision: 2.3.0

```text
[0]             ok
[1][message …]  an error, UTF-8
[2]             read only: never sent for a container
```

- **The sequence.** Exactly one channel response, ok 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` is defined by the answer and is never
  sent on a FUSE serve of a container: a container has no mode, and the server
  answers every change `ok` or with an error.
- **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/container_proxy/outside/endpoints/filesystem/fuse_serve/server/channel_response/setattr/frame.rs`:

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

/// Ok, or why not. See [`fuse::setattr::response::Frame`](crate::shared::containers::fuse::setattr::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::setattr::response::Frame<'a>;
```
