switchyard_translation/codecs/
mod.rs1pub mod anthropic;
7pub(crate) mod common;
8pub mod openai_chat;
9pub mod responses;
10pub mod stream;
11
12use serde_json::Value;
13
14use crate::diagnostic::TranslationDiagnostic;
15use crate::error::Result;
16use crate::format::FormatId;
17use crate::llm::{LlmRequest, LlmResponse};
18use crate::policy::TranslationPolicy;
19
20pub struct DecodedRequest {
22 pub request: LlmRequest,
23 pub diagnostics: Vec<TranslationDiagnostic>,
24}
25
26pub struct EncodedRequest {
28 pub body: Value,
29 pub diagnostics: Vec<TranslationDiagnostic>,
30}
31
32pub struct DecodedResponse {
34 pub response: LlmResponse,
35 pub diagnostics: Vec<TranslationDiagnostic>,
36}
37
38pub struct EncodedResponse {
40 pub body: Value,
41 pub diagnostics: Vec<TranslationDiagnostic>,
42}
43
44pub trait FormatCodec: Send + Sync {
46 fn format(&self) -> FormatId;
48
49 fn decode_request(&self, body: &Value, policy: &TranslationPolicy) -> Result<DecodedRequest>;
51
52 fn encode_request(
54 &self,
55 request: &LlmRequest,
56 policy: &TranslationPolicy,
57 ) -> Result<EncodedRequest>;
58
59 fn decode_response(&self, body: &Value, policy: &TranslationPolicy) -> Result<DecodedResponse>;
61
62 fn encode_response(
64 &self,
65 response: &LlmResponse,
66 policy: &TranslationPolicy,
67 ) -> Result<EncodedResponse>;
68}