va-ai-api-bridge 0.1.7

Protocol translation primitives for AI API request and response shapes.
Documentation
mod request;
mod response;
mod shared;
mod stream;

#[cfg(test)]
mod tests;

use serde_json::Value;

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

pub use response::encode_response;
pub use shared::{
    attach_route_metadata, strip_route_metadata, GEMINI_SKIP_THOUGHT_SIGNATURE_VALIDATOR,
};

pub struct GeminiGenerateContentTranslator;

impl WireTranslator for GeminiGenerateContentTranslator {
    fn protocol(&self) -> WireProtocol {
        WireProtocol::GeminiGenerateContent
    }

    fn decode_request(&self, raw: Value) -> Result<UniversalRequest> {
        request::decode_request(raw)
    }

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

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

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

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