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, } }}