gproxy-protocol 2.2.6

GPROXY protocol types and endpoint metadata
Documentation
mod requests;
mod responses;
mod stream;

pub use requests::*;
pub use responses::*;
pub use stream::*;

use super::common::OpenAiWireModel;

pub type ImageGenerationWireModel = OpenAiWireModel<ImageGenerationRequest, ImagesResponse>;
pub type ImageGenerationStreamWireModel =
    OpenAiWireModel<ImageGenerationRequest, ImageGenerationStreamEvent>;
pub type ImageEditWireModel = OpenAiWireModel<ImageEditRequest, ImagesResponse>;
pub type ImageEditStreamWireModel = OpenAiWireModel<ImageEditRequest, ImageEditStreamEvent>;

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn image_edit_accepts_generic_multipart_json_shape() {
        let req: ImageEditRequest = serde_json::from_str(
            r#"{
                "image": [
                    "data:image/png;base64,AAAA",
                    "file_123"
                ],
                "mask": "data:image/png;base64,BBBB",
                "prompt": "make it blue",
                "model": "gpt-image-1.5",
                "n": "2",
                "stream": "true"
            }"#,
        )
        .unwrap();

        assert_eq!(req.images.len(), 2);
        assert_eq!(
            req.images[0].image_url.as_deref(),
            Some("data:image/png;base64,AAAA")
        );
        assert_eq!(req.images[1].file_id.as_deref(), Some("file_123"));
        assert_eq!(
            req.mask.as_ref().and_then(|mask| mask.image_url.as_deref()),
            Some("data:image/png;base64,BBBB")
        );
        assert_eq!(req.n, Some(2));
        assert_eq!(req.stream, Some(true));
    }
}