gproxy-protocol 1.0.20

Wire-format types and cross-protocol transforms for Claude, OpenAI, and Gemini LLM APIs.
Documentation
use crate::gemini::generate_content::request::GeminiGenerateContentRequest;
use crate::gemini::generate_content::response::GeminiGenerateContentResponse;
use crate::gemini::stream_generate_content::request::GeminiStreamGenerateContentRequest;
use crate::gemini::stream_generate_content::response::GeminiStreamGenerateContentResponse;
use crate::transform::utils::TransformError;

impl TryFrom<&GeminiGenerateContentRequest> for GeminiStreamGenerateContentRequest {
    type Error = TransformError;

    fn try_from(value: &GeminiGenerateContentRequest) -> Result<Self, TransformError> {
        Ok(GeminiStreamGenerateContentRequest {
            method: value.method,
            path: crate::gemini::stream_generate_content::request::PathParameters {
                model: value.path.model.clone(),
            },
            query: crate::gemini::stream_generate_content::request::QueryParameters::default(),
            headers: crate::gemini::stream_generate_content::request::RequestHeaders::default(),
            body: value.body.clone(),
        })
    }
}

impl TryFrom<GeminiGenerateContentRequest> for GeminiStreamGenerateContentRequest {
    type Error = TransformError;

    fn try_from(value: GeminiGenerateContentRequest) -> Result<Self, TransformError> {
        GeminiStreamGenerateContentRequest::try_from(&value)
    }
}

impl TryFrom<GeminiGenerateContentResponse> for GeminiStreamGenerateContentResponse {
    type Error = TransformError;

    fn try_from(value: GeminiGenerateContentResponse) -> Result<Self, TransformError> {
        Ok(match value {
            GeminiGenerateContentResponse::Success {
                stats_code,
                headers,
                ..
            } => GeminiStreamGenerateContentResponse::Success {
                stats_code,
                headers,
            },
            GeminiGenerateContentResponse::Error {
                stats_code,
                headers,
                body,
            } => GeminiStreamGenerateContentResponse::Error {
                stats_code,
                headers,
                body,
            },
        })
    }
}