mod decode;
mod encode;
use crate::canonical::{CanonicalError, CanonicalRequest, Event};
use crate::protocol::{
DecodeState, ExecSpec, Frame, Framing, ModelsShape, Protocol, ProviderCtx, WireRequest,
};
pub struct ClaudeCode;
impl Protocol for ClaudeCode {
fn encode(
&self,
req: &CanonicalRequest,
ctx: &ProviderCtx,
) -> Result<WireRequest, CanonicalError> {
encode::encode(req, ctx)
}
fn path(&self, _ctx: &ProviderCtx) -> String {
String::new()
}
fn content_type(&self) -> &str {
"text/plain"
}
fn decode(&self, frame: Frame, state: &mut DecodeState) -> Result<Vec<Event>, CanonicalError> {
decode::decode(frame, state)
}
fn decode_full(
&self,
body: &[u8],
state: &mut DecodeState,
) -> Result<Vec<Event>, CanonicalError> {
decode::decode_full(body, state)
}
fn framing(&self) -> Framing {
Framing::Ndjson
}
fn models_shape(&self) -> Option<ModelsShape> {
None
}
fn exec_spec(&self, ctx: &ProviderCtx) -> Option<ExecSpec> {
ctx.exec
.map(|program| encode::exec_spec(program, "", ctx.model))
}
}