Codex Handbook
app-server-transport/src/outgoing_message.rs 58 lines
use std::fmt;use codex_app_server_protocol::JSONRPCErrorError;use codex_app_server_protocol::RequestId;use codex_app_server_protocol::Result;use codex_app_server_protocol::ServerNotification;use codex_app_server_protocol::ServerRequest;use serde::Serialize;use tokio::sync::oneshot;/// Stable identifier for a transport connection.#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]pub struct ConnectionId(pub u64);impl fmt::Display for ConnectionId {    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {        write!(f, "{}", self.0)    }}/// Outgoing message from the server to the client.#[derive(Debug, Clone, Serialize)]#[serde(untagged)]pub enum OutgoingMessage {    Request(ServerRequest),    /// AppServerNotification is specific to the case where this is run as an    /// "app server" as opposed to an MCP server.    AppServerNotification(ServerNotification),    Response(OutgoingResponse),    Error(OutgoingError),}#[derive(Debug, Clone, PartialEq, Serialize)]pub struct OutgoingResponse {    pub id: RequestId,    pub result: Result,}#[derive(Debug, Clone, PartialEq, Serialize)]pub struct OutgoingError {    pub error: JSONRPCErrorError,    pub id: RequestId,}#[derive(Debug)]pub struct QueuedOutgoingMessage {    pub message: OutgoingMessage,    pub write_complete_tx: Option<oneshot::Sender<()>>,}impl QueuedOutgoingMessage {    pub fn new(message: OutgoingMessage) -> Self {        Self {            message,            write_complete_tx: None,        }    }}