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}