va-ai-api-bridge 0.1.2

Protocol translation primitives for AI API request and response shapes.
Documentation
mod anthropic;
pub mod anthropic_messages;
mod common;
pub mod gemini_generate_content;
mod openai;
pub mod openai_chat;
pub mod openai_responses;

use serde::{Deserialize, Serialize};
use serde_json::Value;

use crate::{DecodeState, EncodeState, Result, UniversalEvent, UniversalRequest, WireProtocol};

pub use anthropic_messages::AnthropicMessagesTranslator;
pub use gemini_generate_content::GeminiGenerateContentTranslator;
pub use openai_chat::OpenAiChatTranslator;
pub use openai_responses::OpenAiResponsesTranslator;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WireEvent {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub event: Option<String>,
    pub data: Value,
}

pub trait WireTranslator {
    fn protocol(&self) -> WireProtocol;

    fn decode_request(&self, raw: Value) -> Result<UniversalRequest>;

    fn encode_request(&self, request: &UniversalRequest) -> Result<Value>;

    fn decode_response(&self, raw: Value) -> Result<Vec<UniversalEvent>>;

    fn decode_stream_chunk(
        &self,
        raw: Value,
        state: &mut DecodeState,
    ) -> Result<Vec<UniversalEvent>>;

    fn encode_events(
        &self,
        events: &[UniversalEvent],
        state: &mut EncodeState,
    ) -> Result<Vec<WireEvent>>;
}