Skip to main content

origin_asset/
types.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[serde(rename_all = "snake_case")]
6pub enum AssetType {
7    Image,
8    Video,
9    Audio,
10    Music,
11    Tts,
12    Model3d,
13    Sprite,
14    World,
15    Text,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
19#[serde(rename_all = "snake_case")]
20pub enum ImageEditMode {
21    Edit,
22    Inpaint,
23    Restyle,
24    Expand,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct GenerateRequest {
29    pub asset_type: AssetType,
30    pub prompt: Option<String>,
31    pub model: Option<String>,
32    pub input_file: Option<String>,
33    pub provider: Option<String>,
34    pub size: Option<String>,
35    pub transparent: Option<bool>,
36    #[serde(default)]
37    pub reference_images: Vec<String>,
38    pub edit_mode: Option<ImageEditMode>,
39    pub session_id: Option<String>,
40    #[serde(default)]
41    pub params: Value,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct GenerateResponse {
46    pub provider_id: String,
47    pub output_path: Option<String>,
48    pub output_url: Option<String>,
49    pub output_data: Option<String>,
50    #[serde(default)]
51    pub metadata: Value,
52    pub cost_usd: Option<f64>,
53    pub elapsed_ms: Option<u64>,
54    pub job_id: Option<String>,
55    pub user_id: Option<String>,
56    pub session_id: Option<String>,
57}
58
59#[derive(Debug, Clone, Default, Serialize, Deserialize)]
60pub struct ImageOptions {
61    pub model: Option<String>,
62    pub provider: Option<String>,
63    pub size: Option<String>,
64    pub transparent: Option<bool>,
65    pub input: Option<String>,
66    #[serde(default)]
67    pub reference_images: Vec<String>,
68    pub edit_mode: Option<ImageEditMode>,
69    pub session_id: Option<String>,
70    #[serde(default)]
71    pub params: Value,
72}
73
74#[derive(Debug, Clone, Default, Serialize, Deserialize)]
75pub struct VideoOptions {
76    pub model: Option<String>,
77    pub provider: Option<String>,
78    pub input: Option<String>,
79    pub size: Option<String>,
80    #[serde(default)]
81    pub params: Value,
82}
83
84#[derive(Debug, Clone, Default, Serialize, Deserialize)]
85pub struct AudioOptions {
86    pub model: Option<String>,
87    pub provider: Option<String>,
88    pub audio_type: Option<String>,
89    pub duration: Option<u32>,
90    #[serde(default)]
91    pub params: Value,
92}
93
94#[derive(Debug, Clone, Default, Serialize, Deserialize)]
95pub struct TtsOptions {
96    pub model: Option<String>,
97    pub provider: Option<String>,
98    pub voice: Option<String>,
99    pub voice_id: Option<String>,
100    pub language: Option<String>,
101    pub instructions: Option<String>,
102    #[serde(default)]
103    pub params: Value,
104}
105
106#[derive(Debug, Clone, Default, Serialize, Deserialize)]
107pub struct MusicOptions {
108    pub model: Option<String>,
109    pub provider: Option<String>,
110    pub duration: Option<u32>,
111    pub force_instrumental: Option<bool>,
112    pub output_format: Option<String>,
113    #[serde(default)]
114    pub params: Value,
115}
116
117#[derive(Debug, Clone, Default, Serialize, Deserialize)]
118pub struct Model3dOptions {
119    pub model: Option<String>,
120    pub provider: Option<String>,
121    pub input: Option<String>,
122    pub model_version: Option<String>,
123    pub face_limit: Option<u32>,
124    pub pbr: Option<bool>,
125    pub texture_quality: Option<String>,
126    pub auto_size: Option<bool>,
127    pub negative_prompt: Option<String>,
128    #[serde(default)]
129    pub multiview: Vec<String>,
130    pub style: Option<String>,
131    #[serde(default)]
132    pub params: Value,
133}
134
135#[derive(Debug, Clone, Default, Serialize, Deserialize)]
136pub struct SpriteOptions {
137    pub model: Option<String>,
138    pub provider: Option<String>,
139    pub input: Option<String>,
140    pub animation_type: Option<String>,
141    pub direction: Option<String>,
142    pub duration: Option<u32>,
143    pub style: Option<String>,
144    pub output_format: Option<String>,
145    pub fps: Option<u32>,
146    #[serde(default)]
147    pub params: Value,
148}
149
150#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
151#[serde(rename_all = "snake_case")]
152pub enum CropMode {
153    Tightest,
154    PowerOf2,
155}
156
157#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
158#[serde(rename_all = "snake_case")]
159pub enum ComposeDirection {
160    Horizontal,
161    Vertical,
162    Grid,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
166#[serde(tag = "op", rename_all = "snake_case")]
167pub enum ProcessOperation {
168    SmartCrop {
169        mode: Option<CropMode>,
170    },
171    Resize {
172        width: u32,
173        height: u32,
174    },
175    Compose {
176        direction: ComposeDirection,
177        columns: Option<u32>,
178        padding: Option<u32>,
179        frame_width: Option<u32>,
180        frame_height: Option<u32>,
181    },
182    ExtractFrames {
183        count: Option<u32>,
184    },
185    RemoveBg {
186        bg_color: Option<String>,
187    },
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
191pub struct ProcessRequest {
192    pub input: Option<String>,
193    #[serde(default)]
194    pub inputs: Vec<String>,
195    pub operations: Vec<ProcessOperation>,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize)]
199pub struct ProcessOutputItem {
200    pub output_data: String,
201    pub width: u32,
202    pub height: u32,
203}
204
205#[derive(Debug, Clone, Serialize, Deserialize)]
206pub struct ProcessResponse {
207    pub output_data: String,
208    pub width: u32,
209    pub height: u32,
210    #[serde(default)]
211    pub outputs: Vec<ProcessOutputItem>,
212    #[serde(default)]
213    pub operations_applied: Vec<String>,
214    pub elapsed_ms: u64,
215}
216
217#[derive(Debug, Clone, Serialize, Deserialize)]
218pub struct JobSummary {
219    pub id: String,
220    pub user_id: Option<String>,
221    pub asset_type: String,
222    pub provider_id: String,
223    pub status: String,
224    pub error_message: Option<String>,
225    pub output_path: Option<String>,
226    pub cost_usd: Option<f64>,
227    pub created_at: String,
228    pub started_at: Option<String>,
229    pub completed_at: Option<String>,
230    pub duration_ms: Option<i64>,
231}
232
233#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct ProviderCapabilities {
235    pub supports_transparency: bool,
236    pub supports_streaming: bool,
237    pub max_concurrent: u32,
238    pub rate_limit_rpm: Option<u32>,
239    pub priority: i32,
240}
241
242#[derive(Debug, Clone, Serialize, Deserialize)]
243pub struct ProviderInfo {
244    pub id: String,
245    pub display_name: String,
246    pub asset_types: Vec<AssetType>,
247    pub capabilities: ProviderCapabilities,
248}