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