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}