Skip to main content

switchyard_translation/codecs/
mod.rs

1// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Buffered wire-format codecs that translate between provider JSON and IR.
5
6pub 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
20/// Result of decoding a request into neutral IR.
21pub struct DecodedRequest {
22    pub request: LlmRequest,
23    pub diagnostics: Vec<TranslationDiagnostic>,
24}
25
26/// Result of encoding a neutral request into provider JSON.
27pub struct EncodedRequest {
28    pub body: Value,
29    pub diagnostics: Vec<TranslationDiagnostic>,
30}
31
32/// Result of decoding a response into neutral IR.
33pub struct DecodedResponse {
34    pub response: LlmResponse,
35    pub diagnostics: Vec<TranslationDiagnostic>,
36}
37
38/// Result of encoding a neutral response into provider JSON.
39pub struct EncodedResponse {
40    pub body: Value,
41    pub diagnostics: Vec<TranslationDiagnostic>,
42}
43
44/// Codec contract for one buffered provider wire format.
45pub trait FormatCodec: Send + Sync {
46    /// Returns the format handled by this codec.
47    fn format(&self) -> FormatId;
48
49    /// Decodes a request body into the neutral IR.
50    fn decode_request(&self, body: &Value, policy: &TranslationPolicy) -> Result<DecodedRequest>;
51
52    /// Encodes a neutral request into provider JSON.
53    fn encode_request(
54        &self,
55        request: &LlmRequest,
56        policy: &TranslationPolicy,
57    ) -> Result<EncodedRequest>;
58
59    /// Decodes a response body into the neutral IR.
60    fn decode_response(&self, body: &Value, policy: &TranslationPolicy) -> Result<DecodedResponse>;
61
62    /// Encodes a neutral response into provider JSON.
63    fn encode_response(
64        &self,
65        response: &LlmResponse,
66        policy: &TranslationPolicy,
67    ) -> Result<EncodedResponse>;
68}