use crate::adapters::primary::transport::http::refusal::Refusal;
use crate::application::mcp::request_meta::declares_version;
use crate::domain::ProtocolVersion;
use crate::domain::jsonrpc::{Frame, decode};
pub(super) fn check_header(
header: Option<ProtocolVersion>,
negotiated: ProtocolVersion,
) -> Result<(), Refusal> {
let sent = header.map(ProtocolVersion::as_wire);
crate::domain::check_protocol_header(negotiated, sent.as_deref()).map_err(|error| {
Refusal::ProtocolHeader {
reason: error.to_string(),
}
})
}
pub(super) fn declares_own_version(body: &[u8]) -> bool {
let Ok(decoded) = decode(body) else {
return false;
};
let Frame::Single(envelope) = decoded else {
return false;
};
let Some(params) = envelope.params() else {
return false;
};
let Ok(parsed) = serde_json::from_str::<serde_json::Value>(params.get()) else {
return false;
};
declares_version(&parsed)
}