use std::time::Instant;
use crate::protocol::session::ClientInfo;
use crate::protocol::{McpMethod, ParsedBody};
use axum::http::{HeaderMap, Method};
use serde_json::Value;
pub struct RequestContext {
pub start: Instant,
pub http_method: Method,
pub path: String,
pub request_size: usize,
pub wants_sse: bool,
pub session_id: Option<String>,
pub jsonrpc: Option<ParsedBody>,
pub mcp_method: Option<McpMethod>,
pub mcp_method_str: Option<String>,
pub tool: Option<String>,
pub is_batch: bool,
pub client_info_from_init: Option<ClientInfo>,
pub client_name: Option<String>,
pub client_version: Option<String>,
pub tags: Vec<&'static str>,
}
pub struct ResponseContext {
pub status: u16,
pub headers: HeaderMap,
pub body: Vec<u8>,
pub was_sse: bool,
pub json: Option<Value>,
pub rpc_error: Option<(i64, String)>,
pub upstream_us: Option<u64>,
}
impl ResponseContext {
pub fn new(status: u16, headers: HeaderMap, body: Vec<u8>, upstream_us: Option<u64>) -> Self {
Self {
status,
headers,
body,
was_sse: false,
json: None,
rpc_error: None,
upstream_us,
}
}
}