1use serde::{Deserialize, Serialize};
9
10#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
12pub struct Workspace {
13 #[serde(default)]
15 pub id: String,
16 #[serde(default)]
18 pub name: String,
19 #[serde(default)]
21 pub slug: String,
22 #[serde(default)]
24 pub description: Option<String>,
25 #[serde(default)]
27 pub created_by: Option<String>,
28 #[serde(default)]
30 pub created_at: String,
31 #[serde(default)]
33 pub updated_at: Option<String>,
34 #[serde(default)]
36 pub default_text_model: Option<String>,
37 #[serde(default)]
39 pub default_image_model: Option<String>,
40 #[serde(default)]
42 pub default_provider_sort: Option<String>,
43 #[serde(default)]
45 pub io_logging_api_key_ids: Option<Vec<i64>>,
46 #[serde(default)]
48 pub io_logging_sampling_rate: f64,
49 #[serde(default)]
51 pub is_data_discount_logging_enabled: bool,
52 #[serde(default)]
54 pub is_observability_broadcast_enabled: bool,
55 #[serde(default)]
57 pub is_observability_io_logging_enabled: bool,
58}
59
60#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
62pub struct ListWorkspacesOptions {
63 pub offset: Option<u32>,
65 pub limit: Option<u32>,
67}
68
69impl ListWorkspacesOptions {
70 pub fn new() -> Self {
72 Self::default()
73 }
74
75 pub fn offset(mut self, offset: u32) -> Self {
77 self.offset = Some(offset);
78 self
79 }
80
81 pub fn limit(mut self, limit: u32) -> Self {
83 self.limit = Some(limit);
84 self
85 }
86
87 pub(crate) fn to_query(self) -> Vec<(&'static str, String)> {
88 let mut q = Vec::new();
89 if let Some(o) = self.offset {
90 q.push(("offset", o.to_string()));
91 }
92 if let Some(l) = self.limit {
93 q.push(("limit", l.to_string()));
94 }
95 q
96 }
97}
98
99#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
101pub struct ListWorkspacesResponse {
102 #[serde(default)]
104 pub data: Vec<Workspace>,
105 #[serde(default)]
107 pub total_count: u64,
108}
109
110#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
114pub struct CreateWorkspaceRequest {
115 pub name: String,
117 pub slug: String,
119 #[serde(skip_serializing_if = "Option::is_none", default)]
121 pub description: Option<String>,
122 #[serde(skip_serializing_if = "Option::is_none", default)]
124 pub default_text_model: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none", default)]
127 pub default_image_model: Option<String>,
128 #[serde(skip_serializing_if = "Option::is_none", default)]
130 pub default_provider_sort: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none", default)]
133 pub io_logging_api_key_ids: Option<Vec<i64>>,
134 #[serde(skip_serializing_if = "Option::is_none", default)]
136 pub io_logging_sampling_rate: Option<f64>,
137 #[serde(skip_serializing_if = "Option::is_none", default)]
139 pub is_data_discount_logging_enabled: Option<bool>,
140 #[serde(skip_serializing_if = "Option::is_none", default)]
142 pub is_observability_broadcast_enabled: Option<bool>,
143 #[serde(skip_serializing_if = "Option::is_none", default)]
145 pub is_observability_io_logging_enabled: Option<bool>,
146}
147
148#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
151pub struct UpdateWorkspaceRequest {
152 #[serde(skip_serializing_if = "Option::is_none", default)]
154 pub name: Option<String>,
155 #[serde(skip_serializing_if = "Option::is_none", default)]
157 pub slug: Option<String>,
158 #[serde(skip_serializing_if = "Option::is_none", default)]
160 pub description: Option<String>,
161 #[serde(skip_serializing_if = "Option::is_none", default)]
163 pub default_text_model: Option<String>,
164 #[serde(skip_serializing_if = "Option::is_none", default)]
166 pub default_image_model: Option<String>,
167 #[serde(skip_serializing_if = "Option::is_none", default)]
169 pub default_provider_sort: Option<String>,
170 #[serde(skip_serializing_if = "Option::is_none", default)]
172 pub io_logging_api_key_ids: Option<Vec<i64>>,
173 #[serde(skip_serializing_if = "Option::is_none", default)]
175 pub io_logging_sampling_rate: Option<f64>,
176 #[serde(skip_serializing_if = "Option::is_none", default)]
178 pub is_data_discount_logging_enabled: Option<bool>,
179 #[serde(skip_serializing_if = "Option::is_none", default)]
181 pub is_observability_broadcast_enabled: Option<bool>,
182 #[serde(skip_serializing_if = "Option::is_none", default)]
184 pub is_observability_io_logging_enabled: Option<bool>,
185}
186
187#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
189pub struct GetWorkspaceResponse {
190 #[serde(default)]
192 pub data: Workspace,
193}
194
195#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
197pub struct CreateWorkspaceResponse {
198 #[serde(default)]
200 pub data: Workspace,
201}
202
203#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
205pub struct UpdateWorkspaceResponse {
206 #[serde(default)]
208 pub data: Workspace,
209}
210
211#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
213pub struct DeleteWorkspaceResponse {
214 #[serde(default)]
216 pub deleted: bool,
217}
218
219#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
221#[serde(rename_all = "lowercase")]
222pub enum WorkspaceMemberRole {
223 Admin,
225 Member,
227}
228
229#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
231pub struct WorkspaceMember {
232 #[serde(default)]
234 pub id: String,
235 #[serde(default)]
237 pub workspace_id: String,
238 #[serde(default)]
240 pub user_id: String,
241 pub role: WorkspaceMemberRole,
243 #[serde(default)]
245 pub created_at: String,
246}
247
248#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
250pub struct BulkAddWorkspaceMembersResponse {
251 #[serde(default)]
253 pub added_count: u64,
254 #[serde(default)]
256 pub data: Vec<WorkspaceMember>,
257}
258
259#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
261pub struct BulkRemoveWorkspaceMembersResponse {
262 #[serde(default)]
264 pub removed_count: u64,
265}
266
267#[derive(Debug, Serialize)]
269pub(crate) struct BulkWorkspaceMembersRequest<'a> {
270 pub user_ids: &'a [String],
271}