gpt_rs/image/
model.rs

1use serde::{Deserialize, Serialize};
2use std::convert::From;
3
4#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
5pub struct CreateImageRequest {
6    pub prompt: String,
7    pub n: i64,
8    pub size: Size,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub response_format: Option<Format>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub user: Option<String>,
13}
14
15impl From<&str> for CreateImageRequest {
16    fn from(value: &str) -> Self {
17        value.to_string().into()
18    }
19}
20impl From<String> for CreateImageRequest {
21    fn from(value: String) -> Self {
22        Self {
23            prompt: value,
24            n: 1,
25            size: Default::default(),
26            response_format: None,
27            user: None,
28        }
29    }
30}
31
32#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
33pub enum Size {
34    #[serde(rename = "256x256")]
35    Small,
36    #[serde(rename = "512x512")]
37    Medium,
38    #[default]
39    #[serde(rename = "1024x1024")]
40    Large,
41}
42
43#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
44#[serde(rename_all = "lowercase")]
45#[allow(non_camel_case_types)]
46pub enum Format {
47    #[default]
48    Url,
49    B64_Json,
50}
51
52#[derive(Debug, PartialEq, Clone)]
53#[allow(non_camel_case_types)]
54pub enum CreateImageResponse {
55    Url { created: u64, data: Vec<Url> },
56    B64_Json { created: u64, data: Vec<B64> },
57}
58
59#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
60pub struct CreateImageResponseDto<T> {
61    pub created: u64,
62    pub data: Vec<T>,
63}
64
65impl From<CreateImageResponseDto<Url>> for CreateImageResponse {
66    fn from(value: CreateImageResponseDto<Url>) -> Self {
67        Self::Url {
68            created: value.created,
69            data: value.data,
70        }
71    }
72}
73impl From<CreateImageResponseDto<B64>> for CreateImageResponse {
74    fn from(value: CreateImageResponseDto<B64>) -> Self {
75        Self::B64_Json {
76            created: value.created,
77            data: value.data,
78        }
79    }
80}
81
82#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
83pub struct Url {
84    pub url: String,
85}
86
87#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
88pub struct B64 {
89    pub b64_json: String,
90}