tapes_client/core/models/
skill.rs1use serde::{Deserialize, Serialize};
10
11use super::ContractModel;
12
13#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
17#[serde(default)]
18#[non_exhaustive]
19pub struct SkillResponse {
20 #[serde(rename = "authorId")]
22 pub author_id: String,
23
24 pub content: String,
26
27 #[serde(rename = "createdAt")]
29 pub created_at: String,
30
31 pub description: String,
33
34 #[serde(rename = "downloadCount")]
36 pub download_count: i64,
37
38 pub id: String,
40
41 #[serde(rename = "isAiGenerated")]
43 pub is_ai_generated: bool,
44
45 pub name: String,
47
48 #[serde(
50 rename = "originatingSessionIds",
51 deserialize_with = "super::null_default"
52 )]
53 pub originating_session_ids: Vec<String>,
54
55 #[serde(rename = "parentId")]
57 pub parent_id: String,
58
59 pub slug: String,
61
62 #[serde(deserialize_with = "super::null_default")]
64 pub tags: Vec<String>,
65
66 #[serde(rename = "type")]
68 pub type_: String,
69
70 #[serde(rename = "updatedAt")]
72 pub updated_at: String,
73
74 pub version: String,
76
77 pub visibility: String,
79}
80
81impl ContractModel for SkillResponse {
82 const SCHEMA: &'static str = "skillResponse";
83}
84
85#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
91#[serde(default)]
92#[non_exhaustive]
93pub struct SkillsListResponse {
94 #[serde(deserialize_with = "super::null_default")]
96 pub counts: SkillCounts,
97
98 #[serde(deserialize_with = "super::null_default")]
100 pub items: Vec<SkillResponse>,
101
102 pub next_cursor: String,
104}
105
106impl ContractModel for SkillsListResponse {
107 const SCHEMA: &'static str = "skillsListResponse";
108}
109
110#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
115#[serde(default)]
116#[non_exhaustive]
117pub struct SkillCounts {
118 pub all: i64,
120
121 pub mine: i64,
123
124 pub team: i64,
126}
127
128impl ContractModel for SkillCounts {
129 const SCHEMA: &'static str = "skillCountsResp";
130}
131
132#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
136#[serde(default)]
137#[non_exhaustive]
138pub struct SkillVersionResponse {
139 #[serde(rename = "authorId")]
141 pub author_id: String,
142
143 pub changelog: String,
145
146 pub content: String,
148
149 pub id: String,
151
152 #[serde(rename = "publishedAt")]
154 pub published_at: String,
155
156 pub semver: String,
158
159 #[serde(rename = "skillId")]
161 pub skill_id: String,
162
163 #[serde(rename = "versionNumber")]
165 pub version_number: i32,
166}
167
168impl ContractModel for SkillVersionResponse {
169 const SCHEMA: &'static str = "skillVersionResponse";
170}
171
172#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
177#[serde(default)]
178#[non_exhaustive]
179pub struct SkillVersionsResponse {
180 #[serde(rename = "totalCount")]
182 pub total_count: i32,
183
184 #[serde(deserialize_with = "super::null_default")]
186 pub versions: Vec<SkillVersionResponse>,
187}
188
189impl ContractModel for SkillVersionsResponse {
190 const SCHEMA: &'static str = "skillVersionsResponse";
191}
192
193#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
198#[serde(default)]
199#[non_exhaustive]
200pub struct SessionSkillsResponse {
201 #[serde(deserialize_with = "super::null_default")]
203 pub items: Vec<SkillResponse>,
204}
205
206impl ContractModel for SessionSkillsResponse {
207 const SCHEMA: &'static str = "sessionSkillsResponse";
208}
209
210#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
216#[serde(default)]
217pub struct CreateSkillRequest {
218 pub content: String,
220
221 pub description: String,
223
224 pub name: String,
226
227 #[serde(deserialize_with = "super::null_default")]
229 pub tags: Vec<String>,
230
231 #[serde(rename = "type")]
233 pub type_: String,
234}
235
236impl ContractModel for CreateSkillRequest {
237 const SCHEMA: &'static str = "createSkillRequest";
238}
239
240#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
252#[serde(default)]
253pub struct UpdateSkillRequest {
254 #[serde(skip_serializing_if = "Option::is_none")]
256 pub content: Option<String>,
257
258 #[serde(skip_serializing_if = "Option::is_none")]
260 pub description: Option<String>,
261
262 #[serde(skip_serializing_if = "Option::is_none")]
264 pub name: Option<String>,
265
266 #[serde(skip_serializing_if = "Option::is_none")]
268 pub tags: Option<Vec<String>>,
269
270 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
272 pub type_: Option<String>,
273
274 #[serde(skip_serializing_if = "Option::is_none")]
276 pub visibility: Option<String>,
277}
278
279impl ContractModel for UpdateSkillRequest {
280 const SCHEMA: &'static str = "updateSkillRequest";
281}
282
283#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
287#[serde(default)]
288pub struct PublishSkillRequest {
289 pub changelog: String,
291
292 pub content: String,
294}
295
296impl ContractModel for PublishSkillRequest {
297 const SCHEMA: &'static str = "publishSkillRequest";
298}
299
300#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
306#[serde(default)]
307pub struct GenerateSkillRequest {
308 #[serde(deserialize_with = "super::null_default")]
310 pub hint: GenerateSkillRequestHint,
311
312 #[serde(rename = "sessionIds", deserialize_with = "super::null_default")]
314 pub session_ids: Vec<String>,
315}
316
317impl ContractModel for GenerateSkillRequest {
318 const SCHEMA: &'static str = "generateSkillRequest";
319}
320
321#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
333#[serde(default)]
334pub struct GenerateSkillRequestHint {
335 pub description: String,
337
338 pub name: String,
340
341 #[serde(deserialize_with = "super::null_default")]
343 pub tags: Vec<String>,
344
345 #[serde(rename = "type")]
347 pub type_: String,
348}
349
350impl SkillsListResponse {
351 #[must_use]
356 pub fn into_page(self) -> crate::page::Page<SkillResponse> {
357 crate::page::Page {
358 items: self.items,
359 next_cursor: Some(self.next_cursor),
360 }
361 }
362}