Skip to main content

gproxy_protocol/transform/gemini/
nonstream_to_stream.rs

1use crate::gemini::generate_content::request::GeminiGenerateContentRequest;
2use crate::gemini::generate_content::response::GeminiGenerateContentResponse;
3use crate::gemini::stream_generate_content::request::GeminiStreamGenerateContentRequest;
4use crate::gemini::stream_generate_content::response::GeminiStreamGenerateContentResponse;
5use crate::transform::utils::TransformError;
6
7impl TryFrom<&GeminiGenerateContentRequest> for GeminiStreamGenerateContentRequest {
8    type Error = TransformError;
9
10    fn try_from(value: &GeminiGenerateContentRequest) -> Result<Self, TransformError> {
11        Ok(GeminiStreamGenerateContentRequest {
12            method: value.method,
13            path: crate::gemini::stream_generate_content::request::PathParameters {
14                model: value.path.model.clone(),
15            },
16            query: crate::gemini::stream_generate_content::request::QueryParameters::default(),
17            headers: crate::gemini::stream_generate_content::request::RequestHeaders::default(),
18            body: value.body.clone(),
19        })
20    }
21}
22
23impl TryFrom<GeminiGenerateContentRequest> for GeminiStreamGenerateContentRequest {
24    type Error = TransformError;
25
26    fn try_from(value: GeminiGenerateContentRequest) -> Result<Self, TransformError> {
27        GeminiStreamGenerateContentRequest::try_from(&value)
28    }
29}
30
31impl TryFrom<GeminiGenerateContentResponse> for GeminiStreamGenerateContentResponse {
32    type Error = TransformError;
33
34    fn try_from(value: GeminiGenerateContentResponse) -> Result<Self, TransformError> {
35        Ok(match value {
36            GeminiGenerateContentResponse::Success {
37                stats_code,
38                headers,
39                ..
40            } => GeminiStreamGenerateContentResponse::Success {
41                stats_code,
42                headers,
43            },
44            GeminiGenerateContentResponse::Error {
45                stats_code,
46                headers,
47                body,
48            } => GeminiStreamGenerateContentResponse::Error {
49                stats_code,
50                headers,
51                body,
52            },
53        })
54    }
55}