// @generated DO NOT EDIT.
//
// Generated from the CNB OpenAPI specification by `cnb-codegen`.
// Run `cargo run -p cnb-codegen --manifest-path codegen/Cargo.toml \
//      -- --spec codegen/spec/swagger.json --out src` to refresh.

#![allow(clippy::all)]
#![allow(missing_docs)]
#![allow(non_camel_case_types)]

use serde::{Deserialize, Serialize};
/// Generated from `api.Author`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Author {
    /// 用户邮箱。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// 用户名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user_name: Option<String>,
}

/// Generated from `api.Blob`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Blob {
    /// 提交的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.Branch`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Branch {
    /// 分支指向的最新提交信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit: Option<serde_json::Value>,
    /// 分支是否被锁定。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    /// 分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 分支是否是保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub protected: Option<bool>,
}

/// Generated from `api.BranchDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BranchDetail {
    /// 分支指向的最新提交信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit: Option<serde_json::Value>,
    /// 分支是否被锁定。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    /// 分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 分支是否是保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub protected: Option<bool>,
}

/// Generated from `api.BranchProtection`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BranchProtection {
    /// 是否允许所有人创建保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_creation: Option<bool>,
    /// 是否允许所有人删除保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_deletions: Option<bool>,
    /// 是否允许所有人强制推送。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_force_pushes: Option<bool>,
    /// 是否仅允许仓库管理员及负责人创建保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_master_creation: Option<bool>,
    /// 是否仅允许仓库管理员及负责人删除保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_master_deletions: Option<bool>,
    /// 是否仅允许仓库管理员及负责人强制推送。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_master_force_pushes: Option<bool>,
    /// 是否允许仓库管理员及负责人手动合并到目标分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_master_manual_merge: Option<bool>,
    /// 是否仅允许仓库管理员及负责人推送代码到保护分支中。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_master_pushes: Option<bool>,
    /// 是否允许所有人推送代码到保护分支中。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_pushes: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub forbid_approve_pull_created_by_own_npc: Option<bool>,
    /// 保护分支规则唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 需要的代码评审者数量。格式：`评审者数量 ∈ \[1,5\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_approved_review_count: Option<i64>,
    /// 需要的评审通过率。格式：`通过率 ∈ \[1, 100\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_approved_review_ratio: Option<i64>,
    /// 是否仅允许线性提交。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_linear_history: Option<bool>,
    /// 是否需至少一个仓库管理员批准。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_master_approve: Option<bool>,
    /// 是否仅允许自动合并。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_must_auto_merge: Option<bool>,
    /// 是否必须通过合并请求推送代码到此规则匹配分支中。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_must_push_via_pull_request: Option<bool>,
    /// 保护分支的合并请求是否需要代码评审。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_pull_request_reviews: Option<bool>,
    /// 是否需要通过状态检查。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub required_status_checks: Option<bool>,
    /// 保护分支规则名称，支持通配符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rule: Option<String>,
}

/// Generated from `api.CodeIssueDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeIssueDetail {
    /// 责任人邮箱（git 原始信息）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author_email: Option<String>,
    /// 责任人姓名（git 原始信息）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author_name: Option<String>,
    /// 问题创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 问题描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// 规则展示名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub display_name: Option<String>,
    /// 额外信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub extra_msg: Option<String>,
    /// 包含问题的文件路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub file_path: Option<String>,
    /// 问题ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 忽略时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ignored_at: Option<String>,
    /// 问题介绍。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub introduce: Option<String>,
    /// 行号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub line_no: Option<i64>,
    /// 引入问题的commit。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub occur_version: Option<String>,
    /// 重新开启时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reopen_at: Option<String>,
    /// 仓库ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_id: Option<String>,
    /// 问题所在的commit。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub revision: Option<String>,
    /// 严重级别。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub risk_level: Option<String>,
    /// 问题规则。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rule: Option<String>,
    /// 规则名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rule_title: Option<String>,
    /// 问题状态（open/ignored）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 扫描工具。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tool: Option<String>,
}

/// Generated from `api.CodeIssueListData`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeIssueListData {
    /// 问题列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub list: Option<Vec<crate::models::CodeIssueRecord>>,
}

/// Generated from `api.CodeIssueRecord`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeIssueRecord {
    /// 责任人邮箱（git 原始信息）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author_email: Option<String>,
    /// 责任人姓名（git 原始信息）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author_name: Option<String>,
    /// 问题创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 规则展示名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub display_name: Option<String>,
    /// 包含问题的文件路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub file_path: Option<String>,
    /// 问题ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 行号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub line_no: Option<i64>,
    /// 引入问题的commit。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub occur_version: Option<String>,
    /// 仓库ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_id: Option<String>,
    /// 问题所在的commit。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub revision: Option<String>,
    /// 严重级别。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub risk_level: Option<String>,
    /// 问题规则。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rule: Option<String>,
    /// 规则名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rule_title: Option<String>,
    /// 扫描工具。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tool: Option<String>,
}

/// Generated from `api.Commit`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Commit {
    /// 提交的作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 提交的详细信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit: Option<serde_json::Value>,
    /// 提交的提交者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub committer: Option<serde_json::Value>,
    /// 父提交列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub parents: Option<Vec<crate::models::CommitParent>>,
    /// 提交的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.CommitAsset`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitAsset {
    /// 提交附件作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 附件内容类型。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content_type: Option<String>,
    /// 附件创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 下载次数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub download_count: Option<i64>,
    /// 附件哈希算法。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hash_algo: Option<String>,
    /// 附件哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hash_value: Option<String>,
    /// 附件唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 附件名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 附件路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 附件大小（字节）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size_in_byte: Option<i64>,
    /// 附件更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.CommitDiffFilePatch`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitDiffFilePatch {
    /// 新增行数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub additions: Option<i64>,
    /// 删除行数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub deletions: Option<i64>,
    /// 文件权限模式。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<String>,
    /// 文件名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// Git差异补丁内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub patch: Option<String>,
    /// 文件路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 重命名前的原文件名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub previous_filename: Option<String>,
    /// 重命名前的文件权限模式。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub previous_mode: Option<String>,
    /// 文件变更状态。枚举值：`added`,`modified`,`deleted`,`renamed`,`copied`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `api.CommitObject`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitObject {
    /// 提交的作者签名信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 提交的评论数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comment_count: Option<i64>,
    /// 提交的提交者签名信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub committer: Option<serde_json::Value>,
    /// 提交的消息内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// 提交对应的树对象信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tree: Option<serde_json::Value>,
    /// 提交的验证信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verification: Option<serde_json::Value>,
}

/// Generated from `api.CommitObjectTree`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitObjectTree {
    /// 树对象的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.CommitObjectVerification`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitObjectVerification {
    /// 验证负载数据。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub payload: Option<String>,
    /// 验证结果的原因。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reason: Option<String>,
    /// 签名信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub signature: Option<String>,
    /// 提交是否已验证。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<bool>,
    /// 验证时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_at: Option<String>,
}

/// Generated from `api.CommitParent`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitParent {
    /// 父提交的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.CommitStatuses`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitStatuses {
    /// 提交的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 整体提交状态。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 具体的提交状态检查列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub statuses: Option<Vec<crate::models::CommitStatus>>,
}

/// Generated from `api.CompareResponse`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CompareResponse {
    /// 基准对比提交。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub base_commit: Option<serde_json::Value>,
    /// 提交列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commits: Option<Vec<crate::models::Commit>>,
    /// 文件差异列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub files: Option<Vec<crate::models::CommitDiffFilePatch>>,
    /// 源分支最新提交。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub head_commit: Option<serde_json::Value>,
    /// 共同祖先提交。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merge_base_commit: Option<serde_json::Value>,
    /// 总提交数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub total_commits: Option<i64>,
}

/// Generated from `api.Content`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Content {
    /// 当内容为text时的实际内容（base64编码）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content: Option<String>,
    /// 内容编码方式，仅当内容类型为blob时有效。枚举值：`base64`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub encoding: Option<String>,
    /// 子项列表，当内容类型为tree时返回，否则为空。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub entries: Option<Vec<crate::models::TreeEntry>>,
    /// LFS对象的下载URL，仅当内容类型为lfs时有效。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lfs_download_url: Option<String>,
    /// LFS对象的唯一标识符，仅当内容类型为lfs时有效。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lfs_oid: Option<String>,
    /// LFS对象的大小（字节），仅当内容类型为lfs时有效。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lfs_size: Option<i64>,
    /// 内容名称（文件名或目录名）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 内容在仓库中的完整路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// Git对象的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 内容大小（字节）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    /// 内容类型。枚举值：`tree`、`blob`、`lfs`、`empty`
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}

/// Generated from `api.ContributorTrend`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContributorTrend {
    /// 贡献者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 贡献者的总提交数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_count: Option<i64>,
    /// 贡献者以周为单位的提交趋势数据。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub weeks: Option<Vec<crate::models::Week>>,
}

/// Generated from `api.DeleteIssueAssigneesForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DeleteIssueAssigneesForm {
    /// Issue处理人用户名列表，最大限制为8。示例：`\["zhangsan", "lisi"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<String>>,
}

/// Generated from `api.DeletePullAssigneesForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DeletePullAssigneesForm {
    /// 合并请求的处理人用户列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<String>>,
}

/// Generated from `api.DiffLine`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiffLine {
    /// 实际内容文本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content: Option<String>,
    /// 左侧（原版本）的行号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub left_line_number: Option<i64>,
    /// 差异行的前缀符号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prefix: Option<String>,
    /// 右侧（新版本）的行号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub right_line_number: Option<i64>,
    /// 枚举值：`context`,`addition`,`deletion`,`context_eofnl`,`add_eofnl`,`del_eofnl`,`file_header`,`hunk_header`,`binary`
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}

/// Generated from `api.GPGEmail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GpgEmail {
    /// 邮箱
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// 是否已验证
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<bool>,
}

/// Generated from `api.GPGPublicKey`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GpgPublicKey {
    /// 主密钥添加时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 邮箱
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub emails: Option<Vec<crate::models::GpgEmail>>,
    /// 主密钥过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expired_at: Option<String>,
    /// 主密钥ID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 公钥 KeyID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key_id: Option<String>,
    /// 标题
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// PGP公钥文本
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub raw_key: Option<String>,
    /// 子密钥
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub subkeys: Option<Vec<crate::models::GpgSubkey>>,
}

/// Generated from `api.GPGSubkey`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GpgSubkey {
    /// 子密钥添加时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 子密钥过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expired_at: Option<String>,
    /// 子密钥ID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 子密钥 KeyID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key_id: Option<String>,
    /// 主密钥 ID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub primary_key_id: Option<String>,
}

/// Generated from `api.Issue`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Issue {
    /// Issue处理人列表，最多支持8个处理人。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<crate::models::UserInfo>>,
    /// Issue创建者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// Issue评论数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comment_count: Option<i64>,
    /// Issue创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// Issue结束日期。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ended_at: Option<String>,
    /// Issue是否可见。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub invisible: Option<bool>,
    /// Issue标签列表，最多支持10个标签。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::Label>>,
    /// Issue最后活动时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_acted_at: Option<String>,
    /// Issue的唯一标识编号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub number: Option<String>,
    /// Issue优先级。枚举值：`-2P`,`-1P`,`P0`,`P1`,`P2`,`P3`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub priority: Option<String>,
    /// Issue开始日期。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub started_at: Option<String>,
    /// Issue状态。枚举值：`open`,`closed`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 状态变更原因。枚举值：`open`,`completed`,`not_planned`,`reopened`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state_reason: Option<String>,
    /// Issue标题，长度限制2-255字符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// Issue最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.IssueActivity`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssueActivity {
    /// 动态发起人。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub actor: Option<serde_json::Value>,
    /// 动态发起人的仓库访问角色。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub actor_access_role: Option<String>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 动态唯一标识。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 动态详细内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub payload: Option<serde_json::Value>,
    /// 提交时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub submitted_at: Option<String>,
    /// 动态类型。
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}

/// Generated from `api.IssueAssetUploadURL`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssueAssetUploadUrl {
    /// 资源链接。添加到 body 中提交。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub asset_link: Option<String>,
    /// 文件名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 资源路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 上传地址。使用 HTTP Put 请求流试发送数据。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub upload_url: Option<String>,
}

/// Generated from `api.IssueComment`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssueComment {
    /// 发表评论的用户信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 评论的内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 评论的创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 评论的唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// Reaction 数量列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reactions: Option<Vec<crate::models::SceneReaction>>,
    /// 评论的更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.IssueDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssueDetail {
    /// Issue处理人列表，最多支持8个处理人。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<crate::models::UserInfo>>,
    /// Issue创建者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// Issue内容正文。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// Issue评论数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comment_count: Option<i64>,
    /// Issue创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// Issue结束日期。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ended_at: Option<String>,
    /// Issue是否可见。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub invisible: Option<bool>,
    /// Issue标签列表，最多支持10个标签（含创建者和贴标者信息）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::LabelInfo>>,
    /// Issue最后活动时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_acted_at: Option<String>,
    /// Issue的唯一标识编号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub number: Option<String>,
    /// Issue优先级。枚举值：`-2P`,`-1P`,`P0`,`P1`,`P2`,`P3`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub priority: Option<String>,
    /// Issue自定义属性列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub properties: Option<Vec<crate::models::IssueProperty>>,
    /// Issue开始日期。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub started_at: Option<String>,
    /// Issue状态。枚举值：`open`,`closed`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 状态变更原因。枚举值：`open`,`completed`,`not_planned`,`reopened`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state_reason: Option<String>,
    /// Issue标题，长度限制2-255字符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// Issue最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.IssueProperty`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssueProperty {
    /// 自定义属性键名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 自定义属性显示名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 自定义属性类型。枚举值：`string`,`date`,`number`
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
    /// 自定义属性值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

/// Generated from `api.IssuePropertyUpdateResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssuePropertyUpdateResult {
    /// 更新失败的属性数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub failed_count: Option<i64>,
    /// 更新失败的属性key列表，仅当存在失败时返回
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub failed_keys: Option<Vec<String>>,
    /// 更新成功的属性数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub success_count: Option<i64>,
}

/// Generated from `api.Label`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Label {
    /// 标签颜色。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    /// 标签描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// 标签ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// Generated from `api.LabelInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LabelInfo {
    /// 贴标者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub applied_by: Option<serde_json::Value>,
    /// 标签颜色。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    /// 标签创建者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub creator: Option<serde_json::Value>,
    /// 标签描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// 标签ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// Generated from `api.MergePullRequest`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MergePullRequest {
    /// 合并提交的详细描述信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_message: Option<String>,
    /// 合并提交的标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_title: Option<String>,
    /// 合并提交方式。可选值：`merge`,`squash`,`rebase`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merge_style: Option<String>,
}

/// Generated from `api.MergePullResponse`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MergePullResponse {
    /// 是否成功合并。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merged: Option<bool>,
    /// 合并操作的响应消息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// 合并提交的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.Meta`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Meta {
    /// 生成数据的分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub gen_branch: Option<String>,
    /// 生成数据的提交哈希。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub gen_hash: Option<String>,
    /// 数据更新时间戳。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.PatchIssueAssigneesForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchIssueAssigneesForm {
    /// Issue处理人用户名列表，最大限制为8。示例：`\["zhangsan", "lisi"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<String>>,
}

/// Generated from `api.PatchIssueCommentForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchIssueCommentForm {
    /// Issue评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
}

/// Generated from `api.PatchIssueForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchIssueForm {
    /// Issue内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// Issue结束日期。示例：`2026-12-30`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub end_date: Option<String>,
    /// Issue优先级。可选值：`-2P`,`-1P`,`P0`,`P1`,`P2`,`P3`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub priority: Option<String>,
    /// Issue开始日期。示例：`2026-01-01`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_date: Option<String>,
    /// Issue状态。可选值：`open`,`closed`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// ISSUE状态变更原因。可选值：`completed`,`not_planned`,`reopened`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state_reason: Option<String>,
    /// Issue标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
}

/// Generated from `api.PatchLabelForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchLabelForm {
    /// 标签颜色。示例值: `ff0000`,`00ff00`,`0000ff`,`ffffff`。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    /// 标签描述信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub new_name: Option<String>,
}

/// Generated from `api.PatchPullCommentForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchPullCommentForm {
    /// 评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
}

/// Generated from `api.PatchPullRequest`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchPullRequest {
    /// 合并请求的更新内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 合并请求的更新状态。可选值：`open`,`closed`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 合并请求的更新标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
}

/// Generated from `api.PipelineSettings`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PipelineSettings {
    /// 是否允许仓库按照.cnb.yml配置自动触发云原生构建。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub auto_trigger: Option<bool>,
    /// 是否允许仓库按照.cnb.yml配置自动触发定时任务。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cron_auto_trigger: Option<bool>,
    /// 是否允许本仓Fork出来的仓库按照.cnb.yml配置自动触发云原生构建。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub forked_repo_auto_trigger: Option<bool>,
}

/// Generated from `api.PostBlobForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostBlobForm {
    /// Blob的内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content: Option<String>,
    /// 内容的编码格式。可选值：`utf-8`,`base64`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub encoding: Option<String>,
}

/// Generated from `api.PostIssueAssetUploadURLForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostIssueAssetUploadUrlForm {
    /// 文件类型。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content_type: Option<String>,
    /// 文件名。必填。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 文件大小，单位：字节。必须大于 0。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `api.PostIssueAssigneesForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostIssueAssigneesForm {
    /// Issue处理人用户名列表，最大限制为8。示例：`\["zhangsan", "lisi"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<String>>,
}

/// Generated from `api.PostIssueCommentForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostIssueCommentForm {
    /// Issue评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub work_mode: Option<bool>,
}

/// Generated from `api.PostIssueForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostIssueForm {
    /// Issue处理人列表，最大限制为8。示例：`\["处理人1","处理人2"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<String>>,
    /// Issue内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// Issue结束日期。示例：`2026-12-30`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub end_date: Option<String>,
    /// 是否可见。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub invisible: Option<bool>,
    /// Issue标签列表，最大限制为10。示例：`\["标签1","标签2"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<String>>,
    /// Issue优先级。可选值：`-2P`,`-1P`,`P0`,`P1`,`P2`,`P3`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub priority: Option<String>,
    /// Issue开始日期。示例：`2026-01-01`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_date: Option<String>,
    /// Issue标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// 是否开启工作模式。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub work_mode: Option<bool>,
}

/// Generated from `api.PostIssueLabelsForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostIssueLabelsForm {
    /// Issue标签列表，最大限制为10。示例：`\["标签1","标签2"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<String>>,
}

/// Generated from `api.PostLabelForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostLabelForm {
    /// 标签颜色。示例值: `ff0000`,`00ff00`,`0000ff`,`ffffff`。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    /// 标签描述信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// Generated from `api.PostPullAssigneesForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostPullAssigneesForm {
    /// 合并请求的处理人用户列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<String>>,
}

/// Generated from `api.PostPullLabelsForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostPullLabelsForm {
    /// 合并请求的标签列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<String>>,
}

/// Generated from `api.PostPullRequestReviewReplyForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostPullRequestReviewReplyForm {
    /// 回复的评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 父评论ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reply_to_comment_id: Option<String>,
}

/// Generated from `api.PostTagFrom`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostTagFrom {
    /// 标签的描述信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 标签指向的目标对象。格式：`分支名称`,`标签名称`,`提交哈希`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target: Option<String>,
}

/// Generated from `api.Pull`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Pull {
    /// 作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 目标分支信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub base: Option<serde_json::Value>,
    /// 阻塞原因。枚举值：`no_merge_base`,`internal_error`,`code_conflict`,`status_check`,`waiting_review`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub blocked_on: Option<String>,
    /// 合并请求内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 源分支信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub head: Option<serde_json::Value>,
    /// 是否为WIP状态，WIP状态表示合并请求是否是草稿阶段。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_wip: Option<bool>,
    /// 关联的标签列表（含创建者和贴标者信息）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::LabelInfo>>,
    /// 可合并状态。枚举值：`checking`,`mergeable`,`merging`,`merged`,`conflict`,`no-merge-base`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mergeable_state: Option<String>,
    /// 合并者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merged_by: Option<serde_json::Value>,
    /// 合并请求唯一标识符编号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub number: Option<String>,
    /// 评审人列表，包含评审状态信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reviewers: Option<Vec<crate::models::PullReviewer>>,
    /// 合并请求状态。枚举值：`open`,`closed`,`merged`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 合并请求标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
}

/// Generated from `api.PullCommentCreationForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullCommentCreationForm {
    /// 评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
}

/// Generated from `api.PullCreationForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullCreationForm {
    /// 目标分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub base: Option<String>,
    /// 合并请求内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 源分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub head: Option<String>,
    /// 源分支所在的仓库标识。示例值：`owner/repo`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub head_repo: Option<String>,
    /// 合并请求标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
}

/// Generated from `api.PullFile`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullFile {
    /// 新增行数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub additions: Option<i64>,
    /// 文件的Blob对象访问地址。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub blob_url: Option<String>,
    /// 文件内容访问地址。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub contents_url: Option<String>,
    /// 删除行数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub deletions: Option<i64>,
    /// 文件名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub filename: Option<String>,
    /// 文件的差异补丁内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub patch: Option<String>,
    /// 文件的原始内容访问地址。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub raw_url: Option<String>,
    /// 文件的提交哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 文件更改状态。枚举值：`add`,`modify`,`delete`,`rename`,`copy`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `api.PullRef`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullRef {
    /// 分支引用名称。示例值：`refs/heads/main`
    #[serde(rename = "ref", default, skip_serializing_if = "Option::is_none")]
    pub ref_: Option<String>,
    /// 关联的仓库信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo: Option<serde_json::Value>,
    /// 提交哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.PullRefInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullRefInfo {
    /// 分支引用名称。
    #[serde(rename = "ref", default, skip_serializing_if = "Option::is_none")]
    pub ref_: Option<String>,
    /// 关联的仓库信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo: Option<serde_json::Value>,
    /// 提交哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
}

/// Generated from `api.PullRequest`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullRequest {
    /// 处理人列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<crate::models::UserInfo>>,
    /// 作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 目标分支信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub base: Option<serde_json::Value>,
    /// 阻塞原因。枚举值：`no_merge_base`,`internal_error`,`code_conflict`,`status_check`,`waiting_review`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub blocked_on: Option<String>,
    /// 合并请求内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 评论数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comment_count: Option<i64>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 源分支信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub head: Option<serde_json::Value>,
    /// 是否为WIP状态，WIP状态表示合并请求是否是草稿阶段。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_wip: Option<bool>,
    /// 标签列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::Label>>,
    /// 最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_acted_at: Option<String>,
    /// 可合并状态。枚举值：`checking`,`mergeable`,`merging`,`merged`,`conflict`,`no-merge-base`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mergeable_state: Option<String>,
    /// 合并者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merged_by: Option<serde_json::Value>,
    /// Pulls唯一标识编号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub number: Option<String>,
    /// 仓库信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo: Option<serde_json::Value>,
    /// 评审数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub review_count: Option<i64>,
    /// 合并请求状态。枚举值：`open`,`closed`,`merged`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 合并请求标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// 更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.PullRequestComment`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullRequestComment {
    /// 评论作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 合并请求评论的唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// Reaction 数量列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reactions: Option<Vec<crate::models::SceneReaction>>,
    /// 最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.PullRequestInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullRequestInfo {
    /// 处理人列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<crate::models::UserInfo>>,
    /// 作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 目标分支信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub base: Option<serde_json::Value>,
    /// 阻塞原因。枚举值：`no_merge_base`,`internal_error`,`code_conflict`,`status_check`,`waiting_review`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub blocked_on: Option<String>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 源分支信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub head: Option<serde_json::Value>,
    /// 标签列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::Label>>,
    /// 最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_acted_at: Option<String>,
    /// 可合并状态。枚举值：`checking`,`mergeable`,`merging`,`merged`,`conflict`,`no-merge-base`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mergeable_state: Option<String>,
    /// 合并者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merged_by: Option<serde_json::Value>,
    /// Pull唯一标识编号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub number: Option<String>,
    /// 仓库信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo: Option<serde_json::Value>,
    /// 评审者列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reviewers: Option<Vec<crate::models::UserInfo>>,
    /// Pull状态。枚举值：`open`,`closed`,`merged`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// 更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.PullRequestSettings`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullRequestSettings {
    /// 是否允许直接提交合并。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_merge_commit_merge: Option<bool>,
    /// 是否允许变基合并。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_rebase_merge: Option<bool>,
    /// 是否允许压缩合并。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_squash_merge: Option<bool>,
    /// 是否允许自动添加仓库管理员为评审者。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub master_auto_as_reviewer: Option<bool>,
    /// 直接提交合并操作时默认生成的提交信息内容。可选值：`default`,`pull_request_title`,`pull_request_title_with_body`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub merge_commit_message_style: Option<String>,
    /// 压缩合并操作时默认生成的提交信息内容。可选值：`default`,`pull_request_title`,`pull_request_title_with_body`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub squash_commit_message_style: Option<String>,
}

/// Generated from `api.PullReview`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullReview {
    /// Review的作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// Review的详细内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// Review的创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// Review的唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// Review的状态。枚举值：`approved`、`changes_requested`、`commented`、`dismissed`、`pending`等。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// Review的最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.PullReviewComment`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullReviewComment {
    /// 评论的作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 评论的具体内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 评论所基于的提交哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_hash: Option<String>,
    /// 评论的创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 评论关联的差异块信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub diff_hunk: Option<Vec<crate::models::DiffLine>>,
    /// 评论结束行号，subject_type=line时有效。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub end_line: Option<i64>,
    /// 评论结束位置的代码版本侧。枚举值：`left`,`right`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub end_side: Option<String>,
    /// 评论的唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 评论所在文件的路径。示例值：`src/main.go`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// Reaction 数量列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reactions: Option<Vec<crate::models::SceneReaction>>,
    /// 回复的父评论ID，如果是回复评论则不为空。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reply_to_comment_id: Option<String>,
    /// 所属Review的唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub review_id: Option<String>,
    /// Review的状态。枚举值：`approved`,`changes_requested`,`commented`,`dismissed`,`pending`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub review_state: Option<String>,
    /// 评论起始行号，subject_type=line时有效。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_line: Option<i64>,
    /// 评论起始位置的代码版本侧。枚举值：`left`,`right`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_side: Option<String>,
    /// 评论对象类型。枚举值：`line`,`file`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub subject_type: Option<String>,
    /// 评论的最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.PullReviewCommentCreationForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullReviewCommentCreationForm {
    /// 评论内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 结束行号，subject_type=line时必填。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub end_line: Option<i64>,
    /// 评论结束位置的代码版本侧，subject_type=line时必填。可选值：`left`,`right`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub end_side: Option<String>,
    /// 文件路径。示例值：`src/main.go`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 起始行号，subject_type=line时必填。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_line: Option<i64>,
    /// 评论起始位置的代码版本侧，subject_type=line时必填。可选值：`left`,`right`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_side: Option<String>,
    /// 评论对象类型，当subject_type为file时无需指定行号和侧别字段。可选值：`line`,`file`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub subject_type: Option<String>,
}

/// Generated from `api.PullReviewCreationForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullReviewCreationForm {
    /// Review的评审意见内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 评审中的具体评论列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comments: Option<Vec<crate::models::PullReviewCommentCreationForm>>,
    /// Review事件类型.如：`approve`,`comment`,`request_changes`,`pending`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub event: Option<String>,
}

/// Generated from `api.PullReviewer`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PullReviewer {
    /// 评审状态。枚举值：`pending`,`commented`,`approved`,`changes_requested`,`dismissed`。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub review_state: Option<String>,
    /// 评审人信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<serde_json::Value>,
}

/// Generated from `api.PushLimitSettings`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PushLimitSettings {
    /// 允许单次推送最多允许更新分支和标签的个数数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allow_single_push_number: Option<i64>,
    /// 是否开启单次更新分支和标签的个数限制。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub check_single_push_number: Option<bool>,
    /// 强制要求提交必须有签名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_must_be_signatured: Option<bool>,
    /// 是否仅允许负责人和管理员推送或删除标签、创建或删除版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub only_master_can_push_tag: Option<bool>,
    /// 推送提交到仓库，对提交作者和提交人进行检查。可选值：`any`,`registered`,`pusher`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub push_commit_must_be: Option<String>,
}

/// Generated from `api.PutIssueLabelsForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PutIssueLabelsForm {
    /// Issue标签列表，最大限制为10。示例：`\["标签1","标签2"\]`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<String>>,
}

/// Generated from `api.PutPullLabelsForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PutPullLabelsForm {
    /// 合并请求的标签列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<String>>,
}

/// Generated from `api.Release`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Release {
    /// 附件列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assets: Option<Vec<crate::models::ReleaseAsset>>,
    /// 作者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// 版本描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 是否为草稿版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub draft: Option<bool>,
    /// 版本唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 是否为最新版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_latest: Option<bool>,
    /// 版本标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 是否为预发布版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prerelease: Option<bool>,
    /// 版本发布时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub published_at: Option<String>,
    /// 标签与提交标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_commitish: Option<String>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_name: Option<String>,
    /// 更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.ReleaseAsset`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ReleaseAsset {
    /// 浏览器下载URL（通过主域名，用于用户直接访问）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub brower_download_url: Option<String>,
    /// 附件内容类型。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content_type: Option<String>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 下载次数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub download_count: Option<i64>,
    /// 附件哈希算法。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hash_algo: Option<String>,
    /// 附件哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hash_value: Option<String>,
    /// 附件唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 附件名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 附件路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 附件大小（字节）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    /// 更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    /// 附件上传者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub uploader: Option<serde_json::Value>,
    /// API下载URL（通过API域名，用于程序化下载）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
}

/// Generated from `api.Repo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Repo {
    /// 仓库的唯一标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 仓库名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 仓库的路径标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 仓库的Web访问地址。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub web_url: Option<String>,
}

/// Generated from `api.RepoContribTrend`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoContribTrend {
    /// 元数据信息，包含生成分支、哈希和时间戳。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub meta: Option<serde_json::Value>,
    /// 仓库级别的周度统计数据。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_data: Option<Vec<crate::models::Week>>,
    /// 贡献者总数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user_total: Option<i64>,
    /// 贡献者级别的趋势数据，按提交数排序。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub users_data: Option<Vec<crate::models::ContributorTrend>>,
    /// 统计的周总数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub week_total: Option<i64>,
    /// 是否统计增删的行数，默认总提交超过10000的仓库不统计。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub with_line_counts: Option<bool>,
}

/// Generated from `api.RepoInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoInfo {
    /// 仓库ID。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 仓库名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 仓库路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 仓库Web访问地址。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub web_url: Option<String>,
}

/// Generated from `api.RepoProperty`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoProperty {
    /// 自定义属性键名（唯一）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 自定义属性显示名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 自定义属性类型。枚举值：`string`,`date`,`number`
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
    /// 是否可见。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visible: Option<bool>,
}

/// Generated from `api.Signature`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Signature {
    /// 签名时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub date: Option<String>,
    /// 签名者邮箱。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// 签名者姓名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// Generated from `api.Tag`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Tag {
    /// 标签指向的commit对象详细信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit: Option<serde_json::Value>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 标签目标对象哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target: Option<String>,
    /// 目标对象类型。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target_type: Option<String>,
    /// 标签的GPG签名验证信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verification: Option<serde_json::Value>,
}

/// Generated from `api.TagObjectVerification`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TagObjectVerification {
    /// 签名的载荷数据。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub payload: Option<String>,
    /// 验证结果的原因描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reason: Option<String>,
    /// GPG签名内容。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub signature: Option<String>,
    /// 签名验证是否通过。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<bool>,
    /// 验证时间戳。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_at: Option<String>,
}

/// Generated from `api.TreeEntry`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TreeEntry {
    /// 对象名称（文件名或目录名）。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 对象在仓库中的完整路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// Git对象的哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 对象类型。枚举值：`tree`,`blob`,`link`,`submodule`
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}

/// Generated from `api.UserInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UserInfo {
    /// 用户头像。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    /// 用户邮箱。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// 是否冻结。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    /// 是否是 NPC。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_npc: Option<bool>,
    /// 昵称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    /// 用户名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
}

/// Generated from `api.UserIssue`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UserIssue {
    /// Issue处理人列表，最多支持8个处理人。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assignees: Option<Vec<crate::models::UserInfo>>,
    /// Issue创建者信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<serde_json::Value>,
    /// Issue评论数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comment_count: Option<i64>,
    /// Issue创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// Issue结束日期。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ended_at: Option<String>,
    /// Issue是否可见。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub invisible: Option<bool>,
    /// Issue标签列表，最多支持10个标签。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::Label>>,
    /// Issue最后活动时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_acted_at: Option<String>,
    /// Issue的唯一标识编号。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub number: Option<String>,
    /// Issue优先级。枚举值：`-2P`,`-1P`,`P0`,`P1`,`P2`,`P3`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub priority: Option<String>,
    /// 关联的仓库信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo: Option<serde_json::Value>,
    /// Issue开始日期。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub started_at: Option<String>,
    /// Issue状态。枚举值：`open`,`closed`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 状态变更原因。枚举值：`open`,`completed`,`not_planned`,`reopened`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state_reason: Option<String>,
    /// Issue标题，长度限制2-255字符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// Issue最后更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `api.Week`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Week {
    /// 每周增加的行数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub a: Option<i64>,
    /// 每周的提交数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub c: Option<i64>,
    /// 每周删除的行数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub d: Option<i64>,
    /// 周的时间戳。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub w: Option<i64>,
}

/// Generated from `chart.Dependency`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Dependency {
    /// Alias usable alias to be used for the chart
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub alias: Option<String>,
    /// A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub condition: Option<String>,
    /// Enabled bool determines if chart should be loaded
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enabled: Option<bool>,
    /// ImportValues holds the mapping of source values to parent key to be imported. Each item can be a
    /// string or pair of child/parent sublist items.
    #[serde(rename = "import-values", default, skip_serializing_if = "Option::is_none")]
    pub import_values: Option<Vec<serde_json::Value>>,
    /// Name is the name of the dependency.
    /// 
    /// This must mach the name in the dependency's Chart.yaml.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// The URL to the repository.
    /// 
    /// Appending `index.yaml` to this string should result in a URL that can be
    /// used to fetch the repository index.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repository: Option<String>,
    /// Tags can be used to group charts for enabling/disabling together
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<String>>,
    /// Version is the version (range) of this chart.
    /// 
    /// A lock file will always produce a single version, while a dependency
    /// may contain a semantic version range.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}

/// Generated from `chart.Maintainer`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Maintainer {
    /// Email is an optional email address to contact the named maintainer
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// Name is a user name or organization name
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// URL is an optional URL to an address for the named maintainer
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
}

/// Generated from `chart.Metadata`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Metadata {
    /// Annotations are additional mappings uninterpreted by Helm,
    /// made available for inspection by other applications.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<serde_json::Value>,
    /// The API Version of this chart. Required.
    #[serde(rename = "apiVersion", default, skip_serializing_if = "Option::is_none")]
    pub api_version: Option<String>,
    /// The version of the application enclosed inside of this chart.
    #[serde(rename = "appVersion", default, skip_serializing_if = "Option::is_none")]
    pub app_version: Option<String>,
    /// The condition to check to enable chart
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub condition: Option<String>,
    /// Dependencies are a list of dependencies for a chart.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dependencies: Option<Vec<crate::models::Dependency>>,
    /// Whether or not this chart is deprecated
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub deprecated: Option<bool>,
    /// A one-sentence description of the chart
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// The URL to a relevant project page, git repo, or contact person
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub home: Option<String>,
    /// The URL to an icon file.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub icon: Option<String>,
    /// A list of string keywords
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub keywords: Option<Vec<String>>,
    /// KubeVersion is a SemVer constraint specifying the version of Kubernetes required.
    #[serde(rename = "kubeVersion", default, skip_serializing_if = "Option::is_none")]
    pub kube_version: Option<String>,
    /// A list of name and URL/email address combinations for the maintainer(s)
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub maintainers: Option<Vec<crate::models::Maintainer>>,
    /// The name of the chart. Required.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// Source is the URL to the source code of this chart
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sources: Option<Vec<String>>,
    /// The tags to check to enable chart
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<String>,
    /// Specifies the chart type: application or library
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
    /// A SemVer 2 conformant version string of the chart. Required.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}

/// Generated from `constant.AccessRole`.
pub type AccessRole = String;

/// Generated from `constant.RepoDisplayModule`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoDisplayModule {
    /// 仓库动态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub activity: Option<bool>,
    /// 仓库贡献者
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub contributors: Option<bool>,
    /// 仓库版本
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub release: Option<bool>,
}

/// Generated from `constant.RepoStatus`.
pub type RepoStatus = i64;

/// Generated from `constant.SlugType`.
pub type SlugType = i64;

/// Generated from `constant.UserType`.
pub type UserType = i64;

/// Generated from `constant.Visibility`.
pub type Visibility = String;

/// Generated from `convert.NullTime`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct NullTime {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub time: Option<String>,
    /// Valid is true if Time is not NULL
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub valid: Option<bool>,
}

/// Generated from `die.WebError`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WebError {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub errcode: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub errmsg: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub errparam: Option<serde_json::Value>,
}

/// Generated from `dto.ActivityCreateRepoDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ActivityCreateRepoDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub create_at: Option<String>,
    /// 公仓转私仓或仓库被删除后为 null
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub detail: Option<serde_json::Value>,
    /// activity 发生时仓库的 path，这时的 path 是可以公开的
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exposed_repo_path: Option<String>,
    /// 仓库是否封禁
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    /// 仓库是否不可访问（公仓转私仓或仓库被删除后不可访问）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_unaccessible: Option<bool>,
    /// 仓库可见性
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<serde_json::Value>,
}

/// Generated from `dto.ActivityDate`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ActivityDate {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_review_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_reviews: Option<Vec<crate::models::ActivityRepoDetail>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commits: Option<Vec<crate::models::ActivityRepoDetail>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub groups: Option<Vec<crate::models::ActivityJoinGroupDetail>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub issues: Option<Vec<crate::models::ActivityRepoDetail>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub issues_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub private_score: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_request_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_requests: Option<Vec<crate::models::ActivityRepoDetail>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repos: Option<Vec<crate::models::ActivityCreateRepoDetail>>,
}

/// Generated from `dto.ActivityJoinGroupDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ActivityJoinGroupDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub create_at: Option<String>,
    /// 组织详情，组织被删后为 null
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub detail: Option<serde_json::Value>,
    /// 组织别名，组织被删除后才有值
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub remark: Option<String>,
}

/// Generated from `dto.ActivityRepoDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ActivityRepoDetail {
    /// 公仓转私仓或仓库被删除后为 null
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub detail: Option<serde_json::Value>,
    /// activity 发生时仓库的 path，这时的 path 是可以公开的
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exposed_repo_path: Option<String>,
    /// 仓库是否封禁
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    /// 仓库是否不可访问（公仓转私仓或仓库被删除后不可访问）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_unaccessible: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub time: Option<f64>,
    /// 仓库可见性
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<serde_json::Value>,
}

/// Generated from `dto.ActivitySlugDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ActivitySlugDetail {
    /// 完整仓库路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
}

/// Generated from `dto.AiChatCompletionsChoice`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AiChatCompletionsChoice {
    /// 结束原因
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub finish_reason: Option<String>,
    /// 索引
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub index: Option<i64>,
    /// 消息
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<serde_json::Value>,
}

/// Generated from `dto.AiChatCompletionsReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AiChatCompletionsReq {
    /// 对话内容
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub messages: Option<Vec<crate::models::Message>>,
    /// 模型名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    /// 是否流式返回结果，部分模型可能不支持非流式
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stream: Option<bool>,
}

/// Generated from `dto.AiChatCompletionsResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AiChatCompletionsResult {
    /// 选择
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub choices: Option<Vec<crate::models::AiChatCompletionsChoice>>,
    /// 创建时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created: Option<i64>,
    /// ID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 模型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    /// 对象
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub object: Option<String>,
}

/// Generated from `dto.AssetRecordType`.
pub type AssetRecordType = String;

/// Generated from `dto.AssetRecords`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AssetRecords {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 来源地址，例如 release 附件的来源地址是对应的 release 页面。issue和pr文件没有。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub origin_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 资源类型，slug_img和slug_file可调用DeleteAsset接口直接删除该资源，repo_release和repo_commit则不行
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub record_type: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub referer: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size_in_byte: Option<i64>,
}

/// Generated from `dto.Assets`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Assets {
    /// 资源内容类型。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content_type: Option<String>,
    /// 文件扩展信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ext: Option<serde_json::Value>,
    /// 文件名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 资源路径。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 文件大小。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.Badge`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Badge {
    /// 徽章描述
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    /// 徽章分组
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group: Option<serde_json::Value>,
    /// 徽章链接
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub link: Option<String>,
    /// 徽章名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 徽章类型
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
    /// 徽章URL
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
}

/// Generated from `dto.BadgeGroup`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BadgeGroup {
    /// 徽章分组状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    /// 徽章分组类型
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
    /// 徽章分组英文类型
    #[serde(rename = "typeEn", default, skip_serializing_if = "Option::is_none")]
    pub type_en: Option<String>,
}

/// Generated from `dto.BuildCommonResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildCommonResult {
    /// 返回码，0 表示成功，1 表示失败
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code: Option<i64>,
    /// 描述
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
}

/// Generated from `dto.BuildLogsResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildLogsResult {
    /// 构建数据列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub data: Option<Vec<crate::models::LogInfo>>,
    /// 当前仓库是否已经有构建记录，1 表示有构建记录，0 表示没有构建记录
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub init: Option<bool>,
    /// 当前时间戳
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub timestamp: Option<i64>,
    /// 总数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub total: Option<i64>,
}

/// Generated from `dto.BuildPipelineInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildPipelineInfo {
    /// 流水线开始时间
    #[serde(rename = "createTime", default, skip_serializing_if = "Option::is_none")]
    pub create_time: Option<String>,
    /// 流水线耗时，单位：ms
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub duration: Option<i64>,
    /// 流水线 ID
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 流水线标签
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<String>,
    /// 流水线状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `dto.BuildResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildResult {
    /// 构建链接
    #[serde(rename = "buildLogUrl", default, skip_serializing_if = "Option::is_none")]
    pub build_log_url: Option<String>,
    /// 构建信息
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// 构建号
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// 构建是否触发成功，不代表构建结果
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub success: Option<bool>,
}

/// Generated from `dto.BuildStageResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildStageResult {
    /// stage 日志内容，数组格式，一个元素表示一行日志
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content: Option<Vec<String>>,
    /// stage 耗时，单位：ms
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub duration: Option<i64>,
    /// stage 结束时间
    #[serde(rename = "endTime", default, skip_serializing_if = "Option::is_none")]
    pub end_time: Option<i64>,
    /// stage 错误信息
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub error: Option<String>,
    /// stage id
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// stage 名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// stage 开始时间
    #[serde(rename = "startTime", default, skip_serializing_if = "Option::is_none")]
    pub start_time: Option<i64>,
    /// stage 状态:  "pending", "start", "success", "error", "cancel", "skipped"
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `dto.BuildStatusResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BuildStatusResult {
    /// 流水线的状态
    #[serde(rename = "pipelinesStatus", default, skip_serializing_if = "Option::is_none")]
    pub pipelines_status: Option<serde_json::Value>,
    /// 构建状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `dto.ChartPackageDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChartPackageDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_total: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<crate::models::ChartTag>>,
}

/// Generated from `dto.ChartTag`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChartTag {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_deprecated: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<crate::models::Metadata>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.ChartTagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChartTagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    /// 源仓库地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// HasProvenance 是否有出生证明; pypi和conan制品由于有多架构，取决于最新推送.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_deprecated: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<crate::models::Metadata>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.CodeIssueSummary`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeIssueSummary {
    /// 严重风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub critical_count: Option<i64>,
    /// 严重风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub critical_ignore_count: Option<i64>,
    /// 是否开启源码信息扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable: Option<bool>,
    /// 高风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_count: Option<i64>,
    /// 高风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_ignore_count: Option<i64>,
    /// 忽略的问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ignored: Option<i64>,
    /// 低风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_count: Option<i64>,
    /// 低风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_ignore_count: Option<i64>,
    /// 中风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_count: Option<i64>,
    /// 中风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_ignore_count: Option<i64>,
    /// 开启中问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open: Option<i64>,
}

/// Generated from `dto.CodeLicenseOverview`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeLicenseOverview {
    /// 是否开启 License 扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable: Option<bool>,
    /// 高风险 License 数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_risk_cnt: Option<i64>,
    /// 低风险 License 数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_risk_cnt: Option<i64>,
    /// 中风险 License 数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_risk_cnt: Option<i64>,
    /// 未知风险 License 数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub na_risk_cnt: Option<i64>,
}

/// Generated from `dto.CodeSensitiveSummary`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeSensitiveSummary {
    /// 是否开启代码敏感信息扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable: Option<bool>,
    /// 高风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_count: Option<i64>,
    /// 高风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_ignore_count: Option<i64>,
    /// 忽略问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ignored: Option<i64>,
    /// 低风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_count: Option<i64>,
    /// 低风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_ignore_count: Option<i64>,
    /// 中风险问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_count: Option<i64>,
    /// 中风险问题忽略数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_ignore_count: Option<i64>,
    /// 开启中问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open: Option<i64>,
}

/// Generated from `dto.CodeVulOverview`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeVulOverview {
    /// 忽略的严重风险漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub critical_vul_ignore_cnt: Option<i64>,
    /// 打开的严重风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub critical_vul_open_cnt: Option<i64>,
    /// 是否开启代码漏洞扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable: Option<bool>,
    /// 忽略的高风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_vul_ignore_cnt: Option<i64>,
    /// 打开的高风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub high_vul_open_cnt: Option<i64>,
    /// 忽略问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ignored: Option<i64>,
    /// 忽略的低风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_vul_ignore_cnt: Option<i64>,
    /// 打开的低风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub low_vul_open_cnt: Option<i64>,
    /// 忽略的中风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_vul_ignore_cnt: Option<i64>,
    /// 打开的中风险级别漏洞的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium_vul_open_cnt: Option<i64>,
    /// 开启中问题数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open: Option<i64>,
}

/// Generated from `dto.CommonRegistryPackageDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommonRegistryPackageDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_total: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<crate::models::CommonRegistryTag>>,
}

/// Generated from `dto.CommonRegistryProvenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommonRegistryProvenance {
    /// Digest 制品摘要.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    /// GitAddress git仓库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// GitCommit git提交记录.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_commit: Option<String>,
    /// LastPusher 最后推送人.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<serde_json::Value>,
    /// Package 制品名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    /// RegistryAddress 制品库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_address: Option<String>,
    /// SN 流水线构建唯一标识.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// Tag 制品标签名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.CommonRegistryTag`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommonRegistryTag {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `dto.CommonRegistryTagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommonRegistryTagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dependencies: Option<Vec<crate::models::Dependency>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub files: Option<Vec<crate::models::File>>,
    /// HasProvenance 是否有出生证明; pypi和conan制品由于有多架构，取决于最新推送.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<crate::models::MetaData>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.ConanMetaData`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ConanMetaData {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<String>,
    /// conan 的 package 列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conan_packages: Option<Vec<crate::models::ConanPackage>>,
    /// conan recipe 的 revision, conan 制品专用字段
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conan_recipe_revision: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conan_reference: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub home_page: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license_url: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_tag: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repository_url: Option<String>,
}

/// Generated from `dto.ConanPackage`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ConanPackage {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub arch: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub build_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compiler: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub options: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub os: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_revision: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub requires: Option<Vec<String>>,
}

/// Generated from `dto.ConanProvenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ConanProvenance {
    /// LastPusher 最后推送人.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<serde_json::Value>,
    /// Package 制品名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    /// RegistryAddress 制品库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sources: Option<Vec<crate::models::ConanProvenanceSource>>,
    /// Tag 制品标签名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.ConanProvenanceSource`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ConanProvenanceSource {
    /// Digest 制品摘要.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    /// GitAddress git仓库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// GitCommit git提交记录.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_commit: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_revision: Option<String>,
    /// SN 流水线构建唯一标识.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
}

/// Generated from `dto.ConanRegistryTagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ConanRegistryTagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dependencies: Option<Vec<crate::models::Dependency>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub files: Option<Vec<crate::models::File>>,
    /// HasProvenance 是否有出生证明; pypi和conan制品由于有多架构，取决于最新推送.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<crate::models::ConanMetaData>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.ContainerAnnotation`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerAnnotation {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub revision: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}

/// Generated from `dto.ContainerImage`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerImage {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub arch: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub layers: Option<Vec<crate::models::ContainerImageLayer>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub os: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.ContainerImageLayer`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerImageLayer {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub instruction: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.ContainerPackageDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerPackageDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_total: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<crate::models::ContainerTag>>,
}

/// Generated from `dto.ContainerProvenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerProvenance {
    /// Digest 制品摘要.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    /// GitAddress git仓库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// GitCommit git提交记录.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_commit: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub images: Option<Vec<crate::models::ContainerImage>>,
    /// LastPusher 最后推送人.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<serde_json::Value>,
    /// Package 制品名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    /// RegistryAddress 制品库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_address: Option<String>,
    /// SN 流水线构建唯一标识.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// Tag 制品标签名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.ContainerTag`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerTag {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<crate::models::ContainerAnnotation>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub images: Option<Vec<crate::models::ContainerImage>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}

/// Generated from `dto.ContainerTagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContainerTagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<crate::models::ContainerAnnotation>,
    /// 源仓库地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// HasProvenance 是否有出生证明; pypi和conan制品由于有多架构，取决于最新推送.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub image: Option<crate::models::ContainerImage>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    /// 返回的结果是否和提供的架构匹配
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub matches_requested_arch: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub options: Option<Vec<crate::models::ContainerImage>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<String>,
}

/// Generated from `dto.CreateGroupReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateGroupReq {
    /// BindDomain 根组织绑定的域名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bind_domain: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub remark: Option<String>,
}

/// Generated from `dto.CreateMissionReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateMissionReq {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repos: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility: Option<String>,
}

/// Generated from `dto.CreateRepoReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateRepoReq {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility: Option<String>,
}

/// Generated from `dto.DockerModelConfig`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DockerModelConfig {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub architecture: Option<String>,
    /// Format the packaging format of the model file(s), currently the only supported value is gguf.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub format: Option<String>,
    /// FormatVersion the version of the format
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub format_version: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub gguf: Option<crate::models::Gguf>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub parameters: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub quantization: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<String>,
}

/// Generated from `dto.DockerModelDescriptor`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DockerModelDescriptor {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created: Option<String>,
}

/// Generated from `dto.DockerModelPackageDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DockerModelPackageDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_total: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<crate::models::DockerModelTag>>,
}

/// Generated from `dto.DockerModelProvenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DockerModelProvenance {
    /// Digest 制品摘要.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    /// GitAddress git仓库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// GitCommit git提交记录.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_commit: Option<String>,
    /// LastPusher 最后推送人.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<serde_json::Value>,
    /// Package 制品名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    /// RegistryAddress 制品库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_address: Option<String>,
    /// SN 流水线构建唯一标识.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// Tag 制品标签名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.DockerModelTag`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DockerModelTag {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub config: Option<crate::models::DockerModelConfig>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub descriptor: Option<crate::models::DockerModelDescriptor>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.DockerModelTagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DockerModelTagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub config: Option<crate::models::DockerModelConfig>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub descriptor: Option<crate::models::DockerModelDescriptor>,
    /// 源仓库地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// HasProvenance 是否有出生证明; pypi和conan制品由于有多架构，取决于最新推送.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.DocumentStatistics`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DocumentStatistics {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.EmbeddingModel`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EmbeddingModel {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dimension: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// Generated from `dto.EmbeddingModels`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EmbeddingModels {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dimension: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// Generated from `dto.File`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct File {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.Forks`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Forks {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fork_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user_freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user_lock: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
}

/// Generated from `dto.GGUF`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Gguf {
}

/// Generated from `dto.GetBadgeReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GetBadgeReq {
    /// 分支名，例如：main。不传则为默认分支，获取默认分支最新徽章。传了分支名，则获取该分支最新提交记录对应的徽章。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub branch: Option<String>,
}

/// Generated from `dto.GetBadgeResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GetBadgeResult {
    /// 徽章颜色
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    /// 徽章左侧显示内容
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub label: Option<String>,
    /// 徽章链接
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub link: Option<String>,
    /// 徽章链接列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub links: Option<Vec<String>>,
    /// 徽章右侧显示内容
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
}

/// Generated from `dto.GetRankResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GetRankResult {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rank_list: Option<Vec<crate::models::RankDetailWithIncr>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `dto.GroupSettingReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GroupSettingReq {
    /// 组织限制指定邮箱认证才能加入
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email_verification: Option<Vec<String>>,
    /// 组织保护开关，0 - 关闭，1 - 打开
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group_protection: Option<i64>,
    /// 是否对外隐藏组织成员，0 - 否, 1 - 是
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hide_members: Option<i64>,
    /// 是否对外隐藏子组织，0 - 否, 1 - 是
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hide_sub_groups: Option<i64>,
    /// 是否对外显示私有仓库水印，0 - 否, 1 - 是
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub show_private_repo_watermark: Option<i64>,
    /// SettingValue 组织设置值，多个选项，用逗号拼接。可选值来自 SettingNamesArray 的值，e.g. disable_organization_readme,cloud_native_dev_only
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<String>,
}

/// Generated from `dto.HelmProvenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct HelmProvenance {
    /// Digest 制品摘要.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    /// GitAddress git仓库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// GitCommit git提交记录.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_commit: Option<String>,
    /// LastPusher 最后推送人.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<serde_json::Value>,
    /// Package 制品名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    /// RegistryAddress 制品库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_address: Option<String>,
    /// SN 流水线构建唯一标识.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// Tag 制品标签名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.InheritMembersUser`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InheritMembersUser {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_level: Option<crate::models::AccessRole>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email_verification: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inviter: Option<crate::models::Users>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub join_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub member_channel: Option<crate::models::ChannelTypeTarget>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub self_member: Option<bool>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::UserType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    /// 认证类型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<i64>,
    /// 认证过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_expire_in: Option<String>,
}

/// Generated from `dto.IssueConfig`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssueConfig {
    /// 逗号分隔的排除标签字符串
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exclude_labels: Option<String>,
    /// 逗号分隔的标签字符串，如 "bug,feature"
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<String>,
    /// "open", "closed"
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
}

/// Generated from `dto.KnowledgeBaseInfoRes`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct KnowledgeBaseInfoRes {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub embedding_model: Option<crate::models::EmbeddingModels>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exclude: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub issue_last_sync_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub issue_sync_enabled: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_commit_sha: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<crate::models::KnowledgeBaseMetadata>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub statistics: Option<crate::models::DocumentStatistics>,
}

/// Generated from `dto.KnowledgeBaseMetadata`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct KnowledgeBaseMetadata {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub issue: Option<crate::models::IssueConfig>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub processing: Option<crate::models::ProcessingConfig>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}

/// Generated from `dto.LastPusher`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LastPusher {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_frozen: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_lock: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub push_at: Option<String>,
}

/// Generated from `dto.ListBadgeReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListBadgeReq {
}

/// Generated from `dto.ListBadgeResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListBadgeResult {
    /// 徽章列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub badges: Option<Vec<crate::models::Badge>>,
}

/// Generated from `dto.ListForks`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListForks {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fork_tree_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub forks: Option<Vec<crate::models::Forks>>,
}

/// Generated from `dto.ListInheritMembers`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListInheritMembers {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inherit_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub total: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub users: Option<Vec<crate::models::InheritMembersUser>>,
}

/// Generated from `dto.LogInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LogInfo {
    /// 构建日志 url
    #[serde(rename = "buildLogUrl", default, skip_serializing_if = "Option::is_none")]
    pub build_log_url: Option<String>,
    /// 提交日志 title
    #[serde(rename = "commitTitle", default, skip_serializing_if = "Option::is_none")]
    pub commit_title: Option<String>,
    /// 构建开始时间
    #[serde(rename = "createTime", default, skip_serializing_if = "Option::is_none")]
    pub create_time: Option<String>,
    /// 构建耗时，单位：ms
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub duration: Option<i64>,
    /// 事件名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub event: Option<String>,
    /// 事件 url
    #[serde(rename = "eventUrl", default, skip_serializing_if = "Option::is_none")]
    pub event_url: Option<String>,
    /// 构建用户是否被冻结
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    /// 组织名
    #[serde(rename = "groupName", default, skip_serializing_if = "Option::is_none")]
    pub group_name: Option<String>,
    /// 流水线标签
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<String>,
    /// 构建用户昵称
    #[serde(rename = "nickName", default, skip_serializing_if = "Option::is_none")]
    pub nick_name: Option<String>,
    /// 失败的子流水线个数
    #[serde(rename = "pipelineFailCount", default, skip_serializing_if = "Option::is_none")]
    pub pipeline_fail_count: Option<i64>,
    /// 成功的子流水线个数
    #[serde(rename = "pipelineSuccessCount", default, skip_serializing_if = "Option::is_none")]
    pub pipeline_success_count: Option<i64>,
    /// 子流水线个数
    #[serde(rename = "pipelineTotalCount", default, skip_serializing_if = "Option::is_none")]
    pub pipeline_total_count: Option<i64>,
    /// 该构建下的流水线列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pipelines: Option<Vec<crate::models::BuildPipelineInfo>>,
    /// commitid
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 仓库路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    /// 构建号
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// 源分支名
    #[serde(rename = "sourceRef", default, skip_serializing_if = "Option::is_none")]
    pub source_ref: Option<String>,
    /// 源仓库路径
    #[serde(rename = "sourceSlug", default, skip_serializing_if = "Option::is_none")]
    pub source_slug: Option<String>,
    /// 构建状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    /// 目标分支名
    #[serde(rename = "targetRef", default, skip_serializing_if = "Option::is_none")]
    pub target_ref: Option<String>,
    /// 构建 title
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub title: Option<String>,
    /// 用户名
    #[serde(rename = "userName", default, skip_serializing_if = "Option::is_none")]
    pub user_name: Option<String>,
}

/// Generated from `dto.MemberAccessLevel`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MemberAccessLevel {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_level: Option<crate::models::AccessRole>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
}

/// Generated from `dto.MemberAccessLevelInSlugUnion`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MemberAccessLevelInSlugUnion {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_level: Option<crate::models::AccessRole>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inherit: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub read_privilege: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub write_privilege: Option<bool>,
}

/// Generated from `dto.Message`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Message {
    /// 内容
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content: Option<String>,
    /// 角色，可选值：user、assistant
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
}

/// Generated from `dto.MetaData`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MetaData {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub home_page: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license_url: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_tag: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repository_url: Option<String>,
}

/// Generated from `dto.MetadataCondition`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MetadataCondition {
    /// 运算符: "is", "is not", "contains", "not contains", "starts with", "ends with", "is empty", "is not empty"
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comparison_operator: Option<String>,
    /// 字段名称: "position", "path", "type"
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 比较值（"is empty" 和 "is not empty" 时忽略此字段）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

/// Generated from `dto.MetadataFilteringConditions`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MetadataFilteringConditions {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conditions: Option<Vec<crate::models::MetadataCondition>>,
    /// "and" 或 "or"，默认 "and"
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub logical_operator: Option<String>,
}

/// Generated from `dto.MissionPostViewReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionPostViewReq {
    /// 视图唯一标识列表，按此顺序排序
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ids: Option<Vec<String>>,
}

/// Generated from `dto.MissionView`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionView {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::MissionViewType>,
}

/// Generated from `dto.MissionViewConfig`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionViewConfig {
    /// 字段配置
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fields: Option<Vec<crate::models::MissionViewFieldConfig>>,
    /// 分组信息
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group: Option<serde_json::Value>,
    /// 视图唯一标识
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 筛选条件
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub selectors: Option<Vec<crate::models::MissionViewSelector>>,
    /// 排序条件
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sorts: Option<Vec<crate::models::MissionViewSort>>,
    /// 视图类型
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<serde_json::Value>,
}

/// Generated from `dto.MissionViewFieldConfig`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionViewFieldConfig {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub field: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub width: Option<i64>,
}

/// Generated from `dto.MissionViewGroup`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionViewGroup {
    #[serde(rename = "customOrders", default, skip_serializing_if = "Option::is_none")]
    pub custom_orders: Option<crate::models::MissionViewGroupCustom>,
    #[serde(rename = "customVisible", default, skip_serializing_if = "Option::is_none")]
    pub custom_visible: Option<crate::models::MissionViewGroupCustom>,
    #[serde(rename = "expendedList", default, skip_serializing_if = "Option::is_none")]
    pub expended_list: Option<Vec<serde_json::Value>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub field: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub order: Option<crate::models::MissionViewSortOrder>,
}

/// Generated from `dto.MissionViewGroupCustom`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionViewGroupCustom {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub field: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<Vec<serde_json::Value>>,
}

/// Generated from `dto.MissionViewSelector`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionViewSelector {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub field: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub operator: Option<crate::models::OperatorType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<Vec<String>>,
}

/// Generated from `dto.MissionViewSort`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MissionViewSort {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub field: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub order: Option<crate::models::MissionViewSortOrder>,
}

/// Generated from `dto.MissionViewSortOrder`.
pub type MissionViewSortOrder = String;

/// Generated from `dto.MissionViewType`.
pub type MissionViewType = String;

/// Generated from `dto.Missions4User`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Missions4User {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub star_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stared: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<crate::models::Visibility>,
}

/// Generated from `dto.OperatorType`.
pub type OperatorType = String;

/// Generated from `dto.OrganizationAccess`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OrganizationAccess {
    /// AccessRole 用户在当前资源的最大权限
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_role: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_member_count: Option<i64>,
    /// 下面所有层级子组织
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_group_count: Option<i64>,
    /// 下面所有层级子任务
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_registry_count: Option<i64>,
    /// 下面所有层级子仓库
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub domain: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub follow_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_sub_group: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub member_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub remark: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    /// 下一级子组织数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_group_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_registry_count: Option<i64>,
    /// 下一级子仓库
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp: Option<String>,
}

/// Generated from `dto.OrganizationSettingWithParent`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OrganizationSettingWithParent {
    /// 上级group设置了hide_members为1，则下级都不能显示
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub can_show_members: Option<bool>,
    /// 上级group设置了hide_sub_groups为1，则下级都不能显示
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub can_show_sub_groups: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub can_show_watermark: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email_verification: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group_protection: Option<i64>,
    /// 是否对外隐藏组织成员，0 - 否, 1 - 是
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hide_members: Option<i64>,
    /// 是否对外隐藏子组织，0 - 否, 1 - 是
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hide_sub_groups: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub root_email_verification: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub root_group_protection: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub root_values: Option<crate::models::SettingValue>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub show_private_repo_watermark: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<crate::models::SettingValue>,
}

/// Generated from `dto.OrganizationUnion`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OrganizationUnion {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_member_count: Option<i64>,
    /// 下面所有层级子组织
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_group_count: Option<i64>,
    /// 下面所有层级子任务
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_registry_count: Option<i64>,
    /// 下面所有层级子仓库
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub all_sub_repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub domain: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub follow_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_sub_group: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub member_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub remark: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    /// 下一级子组织数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_group_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_registry_count: Option<i64>,
    /// 下一级子仓库
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sub_repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp: Option<String>,
}

/// Generated from `dto.OutsideCollaboratorInRepo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OutsideCollaboratorInRepo {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_level: Option<crate::models::AccessRole>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inviter: Option<crate::models::Users>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub join_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::UserType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    /// 认证类型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<i64>,
    /// 认证过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_expire_in: Option<String>,
}

/// Generated from `dto.Package`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Package {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_dir: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_artifact_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_type: Option<crate::models::PackageType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
}

/// Generated from `dto.PackageDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PackageDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cargo: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub composer: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conan: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub docker: Option<crate::models::ContainerPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dockermodel: Option<crate::models::DockerModelPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub generic: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub helm: Option<crate::models::ChartPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub maven: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npm: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nuget: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ohpm: Option<crate::models::CommonRegistryPackageDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pypi: Option<crate::models::CommonRegistryPackageDetail>,
}

/// Generated from `dto.PackageType`.
pub type PackageType = String;

/// Generated from `dto.PipelineLabel`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PipelineLabel {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<Vec<String>>,
}

/// Generated from `dto.PipelineStatus`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PipelineStatus {
    /// 流水线耗时
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub duration: Option<i64>,
    /// 流水线 id
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 流水线标签
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<Vec<crate::models::PipelineLabel>>,
    /// 流水线计费核时
    #[serde(rename = "metricCoreHours", default, skip_serializing_if = "Option::is_none")]
    pub metric_core_hours: Option<f64>,
    /// 流水线计费耗时，单位：ms
    #[serde(rename = "metricDuration", default, skip_serializing_if = "Option::is_none")]
    pub metric_duration: Option<f64>,
    /// 流水线名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 流水线各 stage 的状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stages: Option<Vec<crate::models::Stage>>,
    /// 流水线状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `dto.ProcessingConfig`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ProcessingConfig {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub chunk_overlap: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub chunk_size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub text_separator: Option<String>,
}

/// Generated from `dto.Provenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Provenance {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cargo: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub composer: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conan: Option<crate::models::ConanProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub docker: Option<crate::models::ContainerProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dockermodel: Option<crate::models::DockerModelProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub generic: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub helm: Option<crate::models::HelmProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub maven: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npm: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nuget: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ohpm: Option<crate::models::CommonRegistryProvenance>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pypi: Option<crate::models::PypiProvenance>,
}

/// Generated from `dto.PyPIMetaData`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PyPiMetaData {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub author: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub home_page: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license_url: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub minimum_stability: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_tag: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repository_url: Option<String>,
}

/// Generated from `dto.PyPIRegistryTagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PyPiRegistryTagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dependencies: Option<Vec<crate::models::Dependency>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub files: Option<Vec<crate::models::File>>,
    /// HasProvenance 是否有出生证明; pypi和conan制品由于有多架构，取决于最新推送.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_provenance: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<crate::models::LastPusher>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<crate::models::PyPiMetaData>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub recent_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.PypiProvenance`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PypiProvenance {
    /// LastPusher 最后推送人.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_pusher: Option<serde_json::Value>,
    /// Package 制品名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub package: Option<String>,
    /// RegistryAddress 制品库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sources: Option<Vec<crate::models::PypiProvenanceSource>>,
    /// Tag 制品标签名.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.PypiProvenanceSource`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PypiProvenanceSource {
    /// Digest 制品摘要.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub digest: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub file_name: Option<String>,
    /// GitAddress git仓库地址.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_address: Option<String>,
    /// GitCommit git提交记录.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub git_commit: Option<String>,
    /// SN 流水线构建唯一标识.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
}

/// Generated from `dto.QueryKnowledgeBaseReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct QueryKnowledgeBaseReq {
    /// 元数据过滤条件
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata_filtering_conditions: Option<serde_json::Value>,
    /// 查询语句
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub query: Option<String>,
    /// 分数阈值
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub score_threshold: Option<f64>,
    /// 返回结果的数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub top_k: Option<i64>,
}

/// Generated from `dto.QueryKnowledgeBaseRes`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct QueryKnowledgeBaseRes {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub chunk: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub score: Option<f64>,
}

/// Generated from `dto.RankDetailWithIncr`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RankDetailWithIncr {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub display_module: Option<crate::models::RepoDisplayModule>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub flags: Option<crate::models::Repo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fork_count: Option<i64>,
    /// 预留
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub forked_from_repo: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub increase_fork: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub increase_star: Option<i64>,
    /// 仓库程序语言，预留
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub language: Option<String>,
    /// 仓库语言
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub languages: Option<serde_json::Value>,
    /// 最新代码更新人姓名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_update_nickname: Option<String>,
    /// 最新代码更新人账户名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_update_username: Option<String>,
    /// 最新代码更新时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_updated_at: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mark_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_builded_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_created_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_merged_pull_count: Option<i64>,
    /// 开启的issue数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open_issue_count: Option<i64>,
    /// 开启的pull request数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open_pull_request_count: Option<i64>,
    /// 完整仓库路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 第二语言
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub second_languages: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub star_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stared: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<serde_json::Value>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub topics: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<crate::models::Visibility>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub web_url: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub weight_score: Option<i64>,
}

/// Generated from `dto.RankLanguageList`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RankLanguageList {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub date: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub language: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rank_type: Option<String>,
}

/// Generated from `dto.Registry4User`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Registry4User {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub artifact_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub kind: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_push_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_push_user: Option<crate::models::Users>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub overwrite_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pkg_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub star_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stared: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub used_size: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<crate::models::Visibility>,
}

/// Generated from `dto.RepoLanguage`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoLanguage {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub color: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub language: Option<String>,
}

/// Generated from `dto.RepoPatch`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoPatch {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub topics: Option<Vec<String>>,
}

/// Generated from `dto.RepoSecurityOverview`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoSecurityOverview {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_issue: Option<crate::models::CodeIssueSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_license: Option<crate::models::CodeLicenseOverview>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_sensitive: Option<crate::models::CodeSensitiveSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_vulnerability: Option<crate::models::CodeVulOverview>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub risk_cnt: Option<crate::models::RepoSecurityRiskCnt>,
}

/// Generated from `dto.RepoSecurityRiskCnt`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoSecurityRiskCnt {
    /// 是否开启源码扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_issue_enable: Option<bool>,
    /// 源码扫描风险数量 (严重+高风险）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_issue_risk_cnt: Option<i64>,
    /// 是否开启代码 License 扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_license_enable: Option<bool>,
    /// License风险数量 (高风险）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_license_risk_cnt: Option<i64>,
    /// 是否开启代码敏感信息扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_sensitive_enable: Option<bool>,
    /// 敏感信息风险数量（高风险）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_sensitive_risk_cnt: Option<i64>,
    /// 是否开启代码漏洞扫描
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_vulnerability_enable: Option<bool>,
    /// 代码漏洞风险数量（严重+高风险）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code_vulnerability_risk_cnt: Option<i64>,
    /// 是否开启安全模块
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub enable: Option<bool>,
    /// 总计数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub total: Option<i64>,
}

/// Generated from `dto.RepoStarUsers`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoStarUsers {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub my_follow_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub total: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub users: Option<Vec<crate::models::StarUser>>,
}

/// Generated from `dto.Repos4User`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Repos4User {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub display_module: Option<crate::models::RepoDisplayModule>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub flags: Option<crate::models::Repo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fork_count: Option<i64>,
    /// 预留
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub forked_from_repo: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 仓库程序语言，预留
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub language: Option<String>,
    /// 仓库语言
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub languages: Option<serde_json::Value>,
    /// 最新代码更新人姓名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_update_nickname: Option<String>,
    /// 最新代码更新人账户名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_update_username: Option<String>,
    /// 最新代码更新时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_updated_at: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mark_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_builded_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_created_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_merged_pull_count: Option<i64>,
    /// 开启的issue数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open_issue_count: Option<i64>,
    /// 开启的pull request数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open_pull_request_count: Option<i64>,
    /// 完整仓库路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pinned_time: Option<String>,
    /// 第二语言
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub second_languages: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub star_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub star_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stared: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<serde_json::Value>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub topics: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<crate::models::Visibility>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub web_url: Option<String>,
}

/// Generated from `dto.Repos4UserBase`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Repos4UserBase {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub display_module: Option<crate::models::RepoDisplayModule>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub flags: Option<crate::models::Repo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fork_count: Option<i64>,
    /// 预留
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub forked_from_repo: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// 仓库程序语言，预留
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub language: Option<String>,
    /// 仓库语言
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub languages: Option<serde_json::Value>,
    /// 最新代码更新人姓名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_update_nickname: Option<String>,
    /// 最新代码更新人账户名
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_update_username: Option<String>,
    /// 最新代码更新时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub last_updated_at: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub license: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mark_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_builded_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_created_pull_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npc_merged_pull_count: Option<i64>,
    /// 开启的issue数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open_issue_count: Option<i64>,
    /// 开启的pull request数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub open_pull_request_count: Option<i64>,
    /// 完整仓库路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    /// 第二语言
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub second_languages: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub star_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<serde_json::Value>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<serde_json::Value>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub topics: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub visibility_level: Option<crate::models::Visibility>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub web_url: Option<String>,
}

/// Generated from `dto.SearchNpcRes`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SearchNpcRes {
    /// NPC 头像
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    /// NPC 触发的构建数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub built_count: Option<i64>,
    /// NPC 名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// NPC 创建的 PR 数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_request_created_count: Option<i64>,
    /// NPC 合并的 PR 数量
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pull_request_merged_count: Option<i64>,
    /// 检索匹配分数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub score: Option<f64>,
    /// NPC 口号
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slogan: Option<String>,
    /// NPC 所属仓库的全路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
}

/// Generated from `dto.Slugs`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Slugs {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub resource_id: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub resource_type: Option<crate::models::SlugType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub root_freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub root_id: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `dto.SpecialAmount`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SpecialAmount {
    /// 云原生构建cpu核时
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_build_corehour: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_build_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_build_expire: Option<String>,
    /// 云原生构建gpu核时
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_build_gpu_corehour: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_build_gpu_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_build_gpu_expire: Option<String>,
    /// 云原生开发cpu核时
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_develop_corehour: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_develop_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_develop_expire: Option<String>,
    /// 云原生开发gpu核时
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_develop_gpu_corehour: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_develop_gpu_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compute_develop_gpu_expire: Option<String>,
    /// 模型调用量的 Credit
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub credit: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub credit_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub credit_expire: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage_git_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage_git_expire: Option<String>,
    /// git存储空间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage_git_gib: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage_object_desc: Option<String>,
    /// 过期时间时为 null 时永久有效
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage_object_expire: Option<String>,
    /// 对象存储空间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage_object_gib: Option<i64>,
}

/// Generated from `dto.Stage`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Stage {
    /// stage 耗时
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub duration: Option<i64>,
    /// stage id
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    /// stage 名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// stage 状态
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
}

/// Generated from `dto.StarUser`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StarUser {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_follow: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stared_at: Option<String>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::UserType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    /// 认证类型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<i64>,
    /// 认证过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_expire_in: Option<String>,
}

/// Generated from `dto.StartBuildReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StartBuildReq {
    /// 触发分支，默认为主分支
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub branch: Option<String>,
    /// 指定配置文件内容，yaml 格式
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub config: Option<String>,
    /// 环境变量，对象格式
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub env: Option<serde_json::Value>,
    /// 事件名，必须是 api_trigger 或以 api_trigger_ 开头，默认为 `api_trigger`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub event: Option<String>,
    /// commit id ，优先级比 tag 高，默认为分支最新提交记录
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 是否等待构建正式触发，为false时会立刻返回 sn 和 buildLogUrl
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sync: Option<String>,
    /// 触发 tag，优先级比 branch 高
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag: Option<String>,
}

/// Generated from `dto.StartWorkspaceReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StartWorkspaceReq {
    /// 分支名或 tag 名，例如：main 或 v1.0.0。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub branch: Option<String>,
    /// Git ref，例如，refs/heads/main 或 refs/tags/v1.0.0。不传 ref 时默认基于分支启动
    #[serde(rename = "ref", default, skip_serializing_if = "Option::is_none")]
    pub ref_: Option<String>,
}

/// Generated from `dto.StartWorkspaceResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StartWorkspaceResult {
    /// 仅新创建开发环境时返回，表示创建开发环境的流水线日志地址
    #[serde(rename = "buildLogUrl", default, skip_serializing_if = "Option::is_none")]
    pub build_log_url: Option<String>,
    /// 仅新创建开发环境时返回，表示创建开发环境的提示信息
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// 仅新创建开发环境时返回，表示创建开发环境的流水线 sn
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// 如果存在开发环境，则返回 WebIDE 访问 url；如果不存在开发环境，则返回启动云原生开发的 loading 页面 url 地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
}

/// Generated from `dto.TagDetail`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TagDetail {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cargo: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub composer: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conan: Option<crate::models::ConanRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub docker: Option<crate::models::ContainerTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dockermodel: Option<crate::models::DockerModelTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub generic: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub helm: Option<crate::models::ChartTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub maven: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub npm: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nuget: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ohpm: Option<crate::models::CommonRegistryTagDetail>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pypi: Option<crate::models::PyPiRegistryTagDetail>,
}

/// Generated from `dto.TransferSlugReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TransferSlugReq {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target: Option<String>,
}

/// Generated from `dto.UpdateGroupReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateGroupReq {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub domain: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_id: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub remark: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp: Option<String>,
}

/// Generated from `dto.UpdateMembersRequest`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateMembersRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_level: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_outside_collaborator: Option<bool>,
}

/// Generated from `dto.UpdateUserInfoPayload`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateUserInfoPayload {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bio: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub company: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub location: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_id: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp_qrcode: Option<String>,
}

/// Generated from `dto.UploadAssetsResponse`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UploadAssetsResponse {
    /// 资源信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub assets: Option<serde_json::Value>,
    /// 上传表单参数。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub form: Option<serde_json::Value>,
    /// 后续调用 confirm 接口用的。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub token: Option<String>,
    /// 上传URL地址。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub upload_url: Option<String>,
}

/// Generated from `dto.UploadBadgeReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UploadBadgeReq {
    /// 徽章 key。目前允许上传的 key 包括：security/tca
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 是否上传 latest 徽章。默认为 false：不上传 latest，仅上传 commitid 对应的徽章；true：上传 latest 和 commitid 对应的徽章
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub latest: Option<bool>,
    /// 点击徽章右侧的跳转链接
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub link: Option<String>,
    /// 徽章右侧显示内容
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// commit id
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sha: Option<String>,
    /// 徽章数值，不传默认用 message 代替
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<i64>,
}

/// Generated from `dto.UploadBadgeResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UploadBadgeResult {
    /// latest 对应的徽章 url 地址。如果没有传 latest: true，则该字段为空字符串
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub latest_url: Option<String>,
    /// commitid 对应的徽章 url 地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,
}

/// Generated from `dto.UploadRequestParams`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UploadRequestParams {
    /// 文件扩展信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ext: Option<serde_json::Value>,
    /// 文件名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 文件大小。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
}

/// Generated from `dto.UserEmails`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UserEmails {
    /// ContactEmail 用户通知邮箱
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub contact_email: Option<String>,
    /// Email 用户git提交邮箱，是 emails 里面的某一个
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// Emails 邮箱列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub emails: Option<Vec<String>>,
    /// 系统默认邮箱
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_email: Option<String>,
    /// 系统默认邮箱是否可以通知
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_email_contact: Option<bool>,
}

/// Generated from `dto.UserFollowResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UserFollowResult {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    /// 查询人是否follow了此用户
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_following: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
}

/// Generated from `dto.Users`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Users {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::UserType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    /// 认证类型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<i64>,
    /// 认证过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_expire_in: Option<String>,
}

/// Generated from `dto.UsersResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UsersResult {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub address: Option<String>,
    /// 用户赞赏码状态，0-无赞赏码，1-有
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub appreciate_status: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bio: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub company: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub follow_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub follow_mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub follow_repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub follower_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub gender: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub identity_providers: Option<serde_json::Value>,
    /// 查询人是否follow了此用户
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_following: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub location: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub public_mission_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub public_registry_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub public_repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub readme_repo_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub registry_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reward_amount: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reward_count: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub site: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stars_count: Option<i64>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::UserType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    /// 认证类型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<i64>,
    /// 认证过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_expire_in: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wechat_mp_qrcode: Option<String>,
}

/// Generated from `dto.UsersWithAccessLevelInSlug`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UsersWithAccessLevelInSlug {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub access_level: Option<crate::models::AccessRole>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub email_verification: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub freeze: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inviter: Option<crate::models::Users>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub join_time: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locked: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub member_channel: Option<crate::models::ChannelTypeTarget>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
    pub type_: Option<crate::models::UserType>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    /// 认证类型
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<i64>,
    /// 认证过期时间
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verified_expire_in: Option<String>,
}

/// Generated from `dto.WorkspaceDeleteReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceDeleteReq {
    /// 表示要删除的开发环境流水线 id，sn 和 pipelineId 二选一，优先使用 pipelineId
    #[serde(rename = "pipelineId", default, skip_serializing_if = "Option::is_none")]
    pub pipeline_id: Option<String>,
    /// 表示要删除的开发环境流水线构建号，sn 和 pipelineId 二选一，优先使用 pipelineId
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
}

/// Generated from `dto.WorkspaceDeleteResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceDeleteResult {
    /// 返回码，0 表示成功，1 表示失败
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code: Option<i64>,
    /// 描述
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
}

/// Generated from `dto.WorkspaceDetailResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceDetailResult {
    /// CodeBuddy 国际版客户端 remote-ssh 访问 schema 地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub codebuddy: Option<String>,
    /// CodeBuddy 国内版客户端 remote-ssh 访问 schema 地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub codebuddycn: Option<String>,
    /// Cursor 客户端 remote-ssh 访问 schema 地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cursor: Option<String>,
    /// jetbrains 系列 ide 的 jetbrains gateway 访问 schema 地址，环境内有安装 JetBrains 系列 ide 才会有
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub jetbrains: Option<serde_json::Value>,
    /// 选择入口页面 url
    #[serde(rename = "jumpUrl", default, skip_serializing_if = "Option::is_none")]
    pub jump_url: Option<String>,
    /// remote-ssh 连接地址
    #[serde(rename = "remoteSsh", default, skip_serializing_if = "Option::is_none")]
    pub remote_ssh: Option<String>,
    /// ssh 登录命令
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ssh: Option<String>,
    /// VSCode 客户端 remote-ssh 访问 schema 地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub vscode: Option<String>,
    /// Vscode 预览版客户端 remote-ssh 访问 schema 地址
    #[serde(rename = "vscode-insiders", default, skip_serializing_if = "Option::is_none")]
    pub vscode_insiders: Option<String>,
    /// WebIDE 访问 url
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub webide: Option<String>,
}

/// Generated from `dto.WorkspaceInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceInfo {
    /// 分支名，例如：main
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub branch: Option<String>,
    /// 备份的 commit 数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_count: Option<i64>,
    /// 开发环境创建时间，例如：2024-12-02T03:20:22.000Z
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub create_time: Option<String>,
    /// 开发环境持续时间，单位：ms（非实时更新）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub duration: Option<i64>,
    /// 备份的文件数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub file_count: Option<i64>,
    /// 备份的文件列表，仅前五个备份文件相对路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub file_list: Option<String>,
    /// 环境销毁时远程最新的 commit short hash
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub latest_sha: Option<String>,
    /// 创建环境的子流水线 id
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pipeline_id: Option<String>,
    /// 备份的 stash 数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub remote_stash_count: Option<i64>,
    /// 仓库地址
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub repo_url: Option<String>,
    /// 恢复备份代码的流水线 id，如果有值表示备份代码已被恢复（重建环境时会恢复备份代码）
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub restore_id: Option<String>,
    /// 仓库路径，例如：groupname/reponame
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slug: Option<String>,
    /// 创建开发环境的流水线 sn
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
    /// 开发环境是否支持 ssh 链接
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ssh: Option<bool>,
    /// 工作区状态，running: 开发环境已启动，closed：开发环境已关闭
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    /// 开发环境默认工作区路径
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub workspace: Option<String>,
}

/// Generated from `dto.WorkspaceListResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceListResult {
    /// 是否有更多数据
    #[serde(rename = "hasMore", default, skip_serializing_if = "Option::is_none")]
    pub has_more: Option<bool>,
    /// 云原生开发环境列表
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub list: Option<Vec<crate::models::WorkspaceInfo>>,
    /// 分页信息
    #[serde(rename = "pageInfo", default, skip_serializing_if = "Option::is_none")]
    pub page_info: Option<serde_json::Value>,
    /// 总数
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub total: Option<i64>,
}

/// Generated from `dto.WorkspacePageInfo`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspacePageInfo {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub page: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub page_size: Option<i64>,
}

/// Generated from `dto.WorkspaceStopReq`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceStopReq {
    /// 表示要停止的开发环境的流水线 id，sn 和 pipelineId 二选一，优先使用 pipelineId
    #[serde(rename = "pipelineId", default, skip_serializing_if = "Option::is_none")]
    pub pipeline_id: Option<String>,
    /// 表示要停止的开发环境流水线构建号，sn 和 pipelineId 二选一，优先使用 pipelineId
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
}

/// Generated from `dto.WorkspaceStopResult`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct WorkspaceStopResult {
    /// 表示停止的开发环境流水线日志地址
    #[serde(rename = "buildLogUrl", default, skip_serializing_if = "Option::is_none")]
    pub build_log_url: Option<String>,
    /// 表示操作结果提示信息
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub message: Option<String>,
    /// 表示停止的开发环境流水线构建号
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sn: Option<String>,
}

/// Generated from `git_woa_com_cnb_monorepo_git_internal_app_git_service_bff_api.CommitStatus`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitStatus {
    /// 提交状态上下文标识符。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub context: Option<String>,
    /// 创建时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    /// 提交状态描述信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// 提交状态。枚举值：`pending`,`success`,`failure`,`error`,`skip`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub state: Option<String>,
    /// 提交状态详情链接。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target_url: Option<String>,
    /// 更新时间。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
}

/// Generated from `git_woa_com_cnb_monorepo_git_internal_app_git_service_bff_api.SceneReaction`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SceneReaction {
    /// 该表情的数量。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub count: Option<i64>,
    /// 当前用户是否已使用该 Reaction。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub has_reacted: Option<bool>,
    /// Reaction 表情类型。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reaction: Option<String>,
    /// 最近使用该 Reaction 的用户列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub top_users: Option<Vec<crate::models::UserInfo>>,
}

/// Generated from `member.ChannelTypeTarget`.
pub type ChannelTypeTarget = String;

/// Generated from `openapi.CommitAssetUploadURL`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitAssetUploadUrl {
    /// URL过期时间，单位为秒。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expires_in_sec: Option<i64>,
    /// 附件上传URL。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub upload_url: Option<String>,
    /// 附件上传确认URL。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verify_url: Option<String>,
}

/// Generated from `openapi.CreateBranchForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateBranchForm {
    /// 新分支的名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 新分支的起始点。格式：`分支名称`,`提交哈希`,`标签名称`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub start_point: Option<String>,
}

/// Generated from `openapi.HeadRef`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct HeadRef {
    /// 分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 分支是否是保护分支。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub protected: Option<bool>,
}

/// Generated from `openapi.IssuePropertiesForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IssuePropertiesForm {
    /// Issue自定义属性列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub properties: Option<Vec<crate::models::PropertyForm>>,
}

/// Generated from `openapi.PatchReleaseForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PatchReleaseForm {
    /// 版本描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 是否为草稿版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub draft: Option<bool>,
    /// 是否设置为最新版本。可选值：`true`,`false`,`legacy`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub make_latest: Option<String>,
    /// 版本标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 是否为预发布版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prerelease: Option<bool>,
}

/// Generated from `openapi.PostCommitAssetUploadURLForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostCommitAssetUploadUrlForm {
    /// 附件名称
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub asset_name: Option<String>,
    /// 附件大小，单位为字节。 Attachment size, in bytes.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    /// 附件存在时间，单位为天
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ttl: Option<i64>,
}

/// Generated from `openapi.PostReleaseAssetUploadURLForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostReleaseAssetUploadUrlForm {
    /// 附件名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub asset_name: Option<String>,
    /// 是否覆盖同名附件。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub overwrite: Option<bool>,
    /// 附件大小，单位为字节。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,
    /// 附件存在时间，单位为天
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ttl: Option<i64>,
}

/// Generated from `openapi.PostReleaseForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PostReleaseForm {
    /// 版本描述。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub body: Option<String>,
    /// 是否为草稿版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub draft: Option<bool>,
    /// 是否设置为最新版本。可选值：`true`,`false`,`legacy`
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub make_latest: Option<String>,
    /// 版本标题。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    /// 是否为预发布版本。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prerelease: Option<bool>,
    /// 标签名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tag_name: Option<String>,
    /// 目标提交哈希或分支名称。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target_commitish: Option<String>,
}

/// Generated from `openapi.PropertyForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PropertyForm {
    /// Issue自定义属性键名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// Issue自定义属性值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

/// Generated from `openapi.PutCommitAnnotation`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PutCommitAnnotation {
    /// 元数据键名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 元数据值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

/// Generated from `openapi.PutCommitAnnotationsForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PutCommitAnnotationsForm {
    /// 提交元数据列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<Vec<crate::models::PutCommitAnnotation>>,
}

/// Generated from `openapi.PutTagAnnotation`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PutTagAnnotation {
    /// 标签元数据的键名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 标签元数据的值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

/// Generated from `openapi.PutTagAnnotationsForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PutTagAnnotationsForm {
    /// 设置tag元数据列表信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<Vec<crate::models::PutTagAnnotation>>,
}

/// Generated from `openapi.ReleaseAssetUploadURL`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ReleaseAssetUploadUrl {
    /// URL过期时间，单位为秒。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expires_in_sec: Option<i64>,
    /// 附件上传URL。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub upload_url: Option<String>,
    /// 附件上传确认验证URL。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub verify_url: Option<String>,
}

/// 配置值，内容为枚举的组合，英文逗号分割
///
/// Generated from `organization.SettingValue`.
pub type SettingValue = String;

/// Generated from `web.CommitAnnotation`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitAnnotation {
    /// 元数据键名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 扩展元数据。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub meta: Option<serde_json::Value>,
    /// 元数据值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

/// Generated from `web.CommitAnnotationInBatch`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CommitAnnotationInBatch {
    /// 提交元数据列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<Vec<crate::models::CommitAnnotation>>,
    /// 提交哈希值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_hash: Option<String>,
}

/// Generated from `web.GetCommitAnnotationsInBatchForm`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GetCommitAnnotationsInBatchForm {
    /// 提交哈希值列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub commit_hashes: Option<Vec<String>>,
    /// 元数据键列表。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub keys: Option<Vec<String>>,
}

/// Generated from `web.TagAnnotation`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TagAnnotation {
    /// 元数据键名。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    /// 元数据信息，用于记录标签元数据的更新操作信息，包括操作者、操作时间、平台来源等审计信息。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub meta: Option<serde_json::Value>,
    /// 元数据值。
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}

