Skip to main content

synth_ai/
models.rs

1use serde::{Deserialize, Serialize};
2use serde_json::{Map, Value};
3
4pub type JsonMap = Map<String, Value>;
5
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7pub struct EmptyResponse {
8    #[serde(flatten)]
9    pub extra: JsonMap,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, Default)]
13pub struct ResourceRef {
14    #[serde(default)]
15    pub id: Option<String>,
16    #[serde(default)]
17    pub status: Option<String>,
18    #[serde(flatten)]
19    pub extra: JsonMap,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, Default)]
23pub struct ResourceList<T> {
24    #[serde(default)]
25    pub items: Vec<T>,
26    #[serde(default)]
27    pub data: Vec<T>,
28    #[serde(default)]
29    pub next_cursor: Option<String>,
30    #[serde(default)]
31    pub cursor: Option<String>,
32    #[serde(flatten)]
33    pub extra: JsonMap,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, Default)]
37pub struct EventsResponse {
38    #[serde(default)]
39    pub events: Vec<Value>,
40    #[serde(default)]
41    pub items: Vec<Value>,
42    #[serde(flatten)]
43    pub extra: JsonMap,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, Default)]
47pub struct ArtifactsResponse {
48    #[serde(default)]
49    pub artifacts: Vec<Value>,
50    #[serde(default)]
51    pub items: Vec<Value>,
52    #[serde(flatten)]
53    pub extra: JsonMap,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, Default)]
57pub struct CursorParams {
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub cursor: Option<String>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub limit: Option<u32>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, Default)]
65pub struct StateChangeRequest {
66    pub state: String,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub reason: Option<String>,
69}