use serde::{Deserialize, Serialize};
use super::ContractModel;
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SkillResponse {
#[serde(rename = "authorId")]
pub author_id: String,
pub content: String,
#[serde(rename = "createdAt")]
pub created_at: String,
pub description: String,
#[serde(rename = "downloadCount")]
pub download_count: i64,
pub id: String,
#[serde(rename = "isAiGenerated")]
pub is_ai_generated: bool,
pub name: String,
#[serde(
rename = "originatingSessionIds",
deserialize_with = "super::null_default"
)]
pub originating_session_ids: Vec<String>,
#[serde(rename = "parentId")]
pub parent_id: String,
pub slug: String,
#[serde(deserialize_with = "super::null_default")]
pub tags: Vec<String>,
#[serde(rename = "type")]
pub type_: String,
#[serde(rename = "updatedAt")]
pub updated_at: String,
pub version: String,
pub visibility: String,
}
impl ContractModel for SkillResponse {
const SCHEMA: &'static str = "skillResponse";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SkillsListResponse {
#[serde(deserialize_with = "super::null_default")]
pub counts: SkillCounts,
#[serde(deserialize_with = "super::null_default")]
pub items: Vec<SkillResponse>,
pub next_cursor: String,
}
impl ContractModel for SkillsListResponse {
const SCHEMA: &'static str = "skillsListResponse";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SkillCounts {
pub all: i64,
pub mine: i64,
pub team: i64,
}
impl ContractModel for SkillCounts {
const SCHEMA: &'static str = "skillCountsResp";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SkillVersionResponse {
#[serde(rename = "authorId")]
pub author_id: String,
pub changelog: String,
pub content: String,
pub id: String,
#[serde(rename = "publishedAt")]
pub published_at: String,
pub semver: String,
#[serde(rename = "skillId")]
pub skill_id: String,
#[serde(rename = "versionNumber")]
pub version_number: i32,
}
impl ContractModel for SkillVersionResponse {
const SCHEMA: &'static str = "skillVersionResponse";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SkillVersionsResponse {
#[serde(rename = "totalCount")]
pub total_count: i32,
#[serde(deserialize_with = "super::null_default")]
pub versions: Vec<SkillVersionResponse>,
}
impl ContractModel for SkillVersionsResponse {
const SCHEMA: &'static str = "skillVersionsResponse";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
#[non_exhaustive]
pub struct SessionSkillsResponse {
#[serde(deserialize_with = "super::null_default")]
pub items: Vec<SkillResponse>,
}
impl ContractModel for SessionSkillsResponse {
const SCHEMA: &'static str = "sessionSkillsResponse";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct CreateSkillRequest {
pub content: String,
pub description: String,
pub name: String,
#[serde(deserialize_with = "super::null_default")]
pub tags: Vec<String>,
#[serde(rename = "type")]
pub type_: String,
}
impl ContractModel for CreateSkillRequest {
const SCHEMA: &'static str = "createSkillRequest";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct UpdateSkillRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility: Option<String>,
}
impl ContractModel for UpdateSkillRequest {
const SCHEMA: &'static str = "updateSkillRequest";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct PublishSkillRequest {
pub changelog: String,
pub content: String,
}
impl ContractModel for PublishSkillRequest {
const SCHEMA: &'static str = "publishSkillRequest";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct GenerateSkillRequest {
#[serde(deserialize_with = "super::null_default")]
pub hint: GenerateSkillRequestHint,
#[serde(rename = "sessionIds", deserialize_with = "super::null_default")]
pub session_ids: Vec<String>,
}
impl ContractModel for GenerateSkillRequest {
const SCHEMA: &'static str = "generateSkillRequest";
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct GenerateSkillRequestHint {
pub description: String,
pub name: String,
#[serde(deserialize_with = "super::null_default")]
pub tags: Vec<String>,
#[serde(rename = "type")]
pub type_: String,
}
impl SkillsListResponse {
#[must_use]
pub fn into_page(self) -> crate::page::Page<SkillResponse> {
crate::page::Page {
items: self.items,
next_cursor: Some(self.next_cursor),
}
}
}