Files
gitks/api/openapi.rs
T
zhenyi 4028f0d943 refactor(api): reorder imports and update code formatting across repository endpoints
- Reordered actix-web imports to standardize import order
- Reordered crate module imports to follow alphabetical ordering
- Updated function calls to use multi-line formatting for better readability
- Standardized blank lines around documentation comments
- Applied consistent formatting to response handling methods
- Normalized import organization across all repository-related API files
- Improved code consistency and maintainability through standardized formatting
- Applied formatting updates to all repository endpoint implementations
2026-06-07 19:41:33 +08:00

560 lines
24 KiB
Rust

use utoipa::OpenApi;
use crate::api::auth::regenerate_2fa_backup_codes::{
Regenerate2FABackupCodesRequest, Regenerate2FABackupCodesResponse,
};
use crate::api::auth::register::RegisterResponse;
use crate::api::issue::lock::LockIssueParams;
use crate::api::issue::subscribers::MuteIssueParams;
use crate::api::issue::transfer::TransferIssueParams;
use crate::api::repo::accept_invitation::AcceptInvitationParams;
use crate::api::repo::set_branch_protection::SetBranchProtectionParams;
use crate::api::repo::transfer_owner::TransferOwnerParams;
use crate::api::response::{ApiEmptyResponse, ApiErrorResponse, ApiResponse};
use crate::api::workspace::accept_invitation::AcceptInvitationRequest;
use crate::api::workspace::review_approval::ReviewApprovalRequest;
use crate::api::workspace::transfer_owner::TransferOwnerRequest;
use crate::models::issues::{
Issue, IssueAssignee, IssueComment, IssueEvent, IssueLabel, IssueLabelRelation, IssueMilestone,
IssuePrRelation, IssueReaction, IssueRepoRelation, IssueSubscriber, IssueTemplate,
};
use crate::models::repos::{
BranchProtectionRule, Repo, RepoBranch, RepoCommitComment, RepoCommitStatus, RepoDeployKey,
RepoFork, RepoInvitation, RepoMember, RepoRelease, RepoStar, RepoStats, RepoTag, RepoWatch,
RepoWebhook,
};
use crate::models::users::{
User, UserAppearance, UserDevice, UserGpgKey, UserNotifySetting, UserProfile, UserSecurityLog,
UserSshKey,
};
use crate::models::workspaces::{
Workspace, WorkspaceAuditLog, WorkspaceBilling, WorkspaceCustomBranding, WorkspaceDomain,
WorkspaceIntegration, WorkspaceInvitation, WorkspaceMember, WorkspacePendingApproval,
WorkspaceSettings, WorkspaceStats, WorkspaceWebhook,
};
use crate::service::auth::captcha::{CaptchaQuery, CaptchaResponse};
use crate::service::auth::email::{EmailChangeRequest, EmailResponse, EmailVerifyRequest};
use crate::service::auth::login::LoginParams;
use crate::service::auth::me::ContextMe;
use crate::service::auth::register::{
RegisterEmailCodeParams, RegisterEmailCodeResponse, RegisterParams,
};
use crate::service::auth::reset_pass::{ResetPasswordRequest, ResetPasswordVerifyParams};
use crate::service::auth::rsa::RsaResponse;
use crate::service::auth::totp::{
Disable2FAParams, Enable2FAResponse, Get2FAStatusResponse, Verify2FAParams,
};
use crate::service::issues::comments::{CreateCommentParams, UpdateCommentParams};
use crate::service::issues::core::{CreateIssueParams, IssueListFilters, UpdateIssueParams};
use crate::service::issues::labels::{CreateLabelParams, UpdateLabelParams};
use crate::service::issues::milestones::{CreateMilestoneParams, UpdateMilestoneParams};
use crate::service::issues::pr_relations::LinkPrParams;
use crate::service::issues::reactions::CreateIssueReactionParams;
use crate::service::issues::repo_relations::LinkRepoParams;
use crate::service::issues::templates::{CreateTemplateParams, UpdateTemplateParams};
use crate::service::repo::branches::CreateBranchParams;
use crate::service::repo::commit_status::{CreateCommitCommentParams, CreateCommitStatusParams};
use crate::service::repo::core::{CreateRepoParams, UpdateRepoParams};
use crate::service::repo::deploy_keys::AddDeployKeyParams;
use crate::service::repo::fork::ForkRepoParams;
use crate::service::repo::invitations::CreateRepoInvitationParams;
use crate::service::repo::members::{AddRepoMemberParams, UpdateRepoMemberRoleParams};
use crate::service::repo::protection::{
BranchMergeCheck, CreateProtectionRuleParams, UpdateProtectionRuleParams,
};
use crate::service::repo::releases::{CreateReleaseParams, UpdateReleaseParams};
use crate::service::repo::tags::CreateTagParams;
use crate::service::repo::watches::WatchParams;
use crate::service::repo::webhooks::{
CreateWebhookParams as RepoCreateWebhookParams, UpdateWebhookParams as RepoUpdateWebhookParams,
};
use crate::service::user::account::{
UpdateUserAccountParams, UploadUserAvatarParams, UserAvatarResponse,
};
use crate::service::user::appearance::UpdateUserAppearanceParams;
use crate::service::user::keys::{AddGpgKeyParams, AddSshKeyParams};
use crate::service::user::notify::UpdateUserNotifySettingParams;
use crate::service::user::profile::UpdateUserProfileParams;
use crate::service::user::security::{UserOAuthInfo, UserPersonalAccessTokenInfo, UserSessionInfo};
use crate::service::workspace::approvals::RequestApprovalParams;
use crate::service::workspace::billing::UpdateBillingParams;
use crate::service::workspace::branding::UpdateBrandingParams;
use crate::service::workspace::core::{CreateWorkspaceParams, UpdateWorkspaceParams};
use crate::service::workspace::domains::AddDomainParams;
use crate::service::workspace::integrations::{CreateIntegrationParams, UpdateIntegrationParams};
use crate::service::workspace::invitations::{CreateInvitationParams, CreateInvitationResponse};
use crate::service::workspace::members::{AddMemberParams, UpdateMemberRoleParams};
use crate::service::workspace::settings::UpdateWorkspaceSettingsParams;
use crate::service::workspace::webhooks::{CreateWebhookParams, UpdateWebhookParams};
#[derive(OpenApi)]
#[openapi(
info(
title = "AppKS API",
version = "0.1.0",
description = "AppKS collaborative development platform HTTP API. Auth endpoints use server-side sessions backed by Redis and a signed/encrypted session cookie. Sensitive password fields are RSA-OAEP-SHA256 encrypted per session before transmission."
),
tags(
(name = "Auth", description = "Authentication, registration, session and email security endpoints."),
(name = "User", description = "User account management, profile, appearance, notification settings, SSH/GPG keys, sessions, devices, OAuth accounts, security logs, and personal access tokens."),
(name = "Workspaces", description = "Workspace CRUD, archiving, ownership transfer, and avatar management."),
(name = "Repos", description = "Repository management including branches, tags, releases, forks, stars, watches, members, invitations, deploy keys, webhooks, protection rules, commit statuses, and statistics."),
(name = "Issues", description = "Issue tracking, comments, labels, milestones, assignees, events, reactions, subscribers, templates, and cross-references with repos and pull requests."),
),
paths(
// Auth
crate::api::auth::rsa::handle,
crate::api::auth::captcha::handle,
crate::api::auth::login::handle,
crate::api::auth::logout::handle,
crate::api::auth::me::handle,
crate::api::auth::register_email_code::handle,
crate::api::auth::register::handle,
crate::api::auth::get_email::handle,
crate::api::auth::request_email_change::handle,
crate::api::auth::verify_email::handle,
crate::api::auth::request_reset_password::handle,
crate::api::auth::verify_reset_password::handle,
crate::api::auth::get_2fa_status::handle,
crate::api::auth::enable_2fa::handle,
crate::api::auth::verify_2fa::handle,
crate::api::auth::disable_2fa::handle,
crate::api::auth::regenerate_2fa_backup_codes::handle,
// User
crate::api::user::get_account::get_account,
crate::api::user::update_account::update_account,
crate::api::user::upload_avatar::upload_avatar,
crate::api::user::delete_account::delete_account,
crate::api::user::get_appearance::get_appearance,
crate::api::user::update_appearance::update_appearance,
crate::api::user::get_profile::get_profile,
crate::api::user::update_profile::update_profile,
crate::api::user::get_notifications::get_notifications,
crate::api::user::update_notifications::update_notifications,
crate::api::user::list_ssh_keys::list_ssh_keys,
crate::api::user::add_ssh_key::add_ssh_key,
crate::api::user::delete_ssh_key::delete_ssh_key,
crate::api::user::list_gpg_keys::list_gpg_keys,
crate::api::user::add_gpg_key::add_gpg_key,
crate::api::user::delete_gpg_key::delete_gpg_key,
crate::api::user::list_sessions::list_sessions,
crate::api::user::revoke_session::revoke_session,
crate::api::user::list_devices::list_devices,
crate::api::user::delete_device::delete_device,
crate::api::user::list_oauth_accounts::list_oauth_accounts,
crate::api::user::unlink_oauth::unlink_oauth,
crate::api::user::list_security_logs::list_security_logs,
crate::api::user::list_personal_access_tokens::list_tokens,
crate::api::user::revoke_personal_access_token::revoke_token,
// Issues - Core
crate::api::issue::list::list,
crate::api::issue::get::get,
crate::api::issue::create::create,
crate::api::issue::update::update,
crate::api::issue::close::close,
crate::api::issue::reopen::reopen,
crate::api::issue::delete::delete,
crate::api::issue::lock::lock,
crate::api::issue::transfer::transfer,
// Issues - Comments
crate::api::issue::list_comments::list_comments,
crate::api::issue::create_comment::create_comment,
crate::api::issue::update_comment::update_comment,
crate::api::issue::delete_comment::delete_comment,
// Issues - Labels (repo-level)
crate::api::issue::list_labels::list_labels,
crate::api::issue::create_label::create_label,
crate::api::issue::update_label::update_label,
crate::api::issue::delete_label::delete_label,
// Issues - Label relations (issue-level)
crate::api::issue::list_issue_labels::list_issue_labels,
crate::api::issue::assign_label::assign_label,
crate::api::issue::unassign_label::unassign_label,
// Issues - Milestones (repo-level)
crate::api::issue::list_milestones::list_milestones,
crate::api::issue::create_milestone::create_milestone,
crate::api::issue::update_milestone::update_milestone,
crate::api::issue::delete_milestone::delete_milestone,
// Issues - Assignees
crate::api::issue::list_assignees::list_assignees,
crate::api::issue::assign_issue::assign_issue,
crate::api::issue::unassign_issue::unassign_issue,
// Issues - Events
crate::api::issue::list_events::list_events,
// Issues - Reactions
crate::api::issue::reactions::list_reactions,
crate::api::issue::reactions::add_reaction,
crate::api::issue::reactions::remove_reaction,
// Issues - Subscribers
crate::api::issue::subscribers::list_subscribers,
crate::api::issue::subscribers::subscribe,
crate::api::issue::subscribers::unsubscribe,
crate::api::issue::subscribers::mute,
// Issues - Templates (repo-level)
crate::api::issue::templates::list_templates,
crate::api::issue::templates::create_template,
crate::api::issue::templates::update_template,
crate::api::issue::templates::delete_template,
// Issues - Repo relations
crate::api::issue::repo_relations::list_repo_relations,
crate::api::issue::repo_relations::link_repo,
crate::api::issue::repo_relations::unlink_repo,
// Issues - PR relations
crate::api::issue::pr_relations::list_pr_relations,
crate::api::issue::pr_relations::link_pr,
crate::api::issue::pr_relations::unlink_pr,
// Workspaces
crate::api::workspace::list::handle,
crate::api::workspace::get::handle,
crate::api::workspace::create::handle,
crate::api::workspace::update::handle,
crate::api::workspace::archive::handle,
crate::api::workspace::unarchive::handle,
crate::api::workspace::delete::handle,
crate::api::workspace::transfer_owner::handle,
crate::api::workspace::upload_avatar::handle,
crate::api::workspace::list_members::handle,
crate::api::workspace::add_member::handle,
crate::api::workspace::update_member_role::handle,
crate::api::workspace::remove_member::handle,
crate::api::workspace::leave::handle,
crate::api::workspace::list_invitations::handle,
crate::api::workspace::create_invitation::handle,
crate::api::workspace::revoke_invitation::handle,
crate::api::workspace::accept_invitation::handle,
crate::api::workspace::get_billing::handle,
crate::api::workspace::update_billing::handle,
crate::api::workspace::get_branding::handle,
crate::api::workspace::update_branding::handle,
crate::api::workspace::get_settings::handle,
crate::api::workspace::update_settings::handle,
crate::api::workspace::get_stats::handle,
crate::api::workspace::refresh_stats::handle,
crate::api::workspace::list_integrations::handle,
crate::api::workspace::create_integration::handle,
crate::api::workspace::update_integration::handle,
crate::api::workspace::delete_integration::handle,
crate::api::workspace::list_webhooks::handle,
crate::api::workspace::create_webhook::handle,
crate::api::workspace::update_webhook::handle,
crate::api::workspace::delete_webhook::handle,
crate::api::workspace::list_domains::handle,
crate::api::workspace::add_domain::handle,
crate::api::workspace::verify_domain::handle,
crate::api::workspace::set_primary_domain::handle,
crate::api::workspace::delete_domain::handle,
crate::api::workspace::list_approvals::handle,
crate::api::workspace::request_approval::handle,
crate::api::workspace::review_approval::handle,
crate::api::workspace::audit_logs::handle,
// Repos
crate::api::repo::list::list,
crate::api::repo::get::get,
crate::api::repo::create::create,
crate::api::repo::update::update,
crate::api::repo::archive::archive,
crate::api::repo::unarchive::unarchive,
crate::api::repo::delete::delete,
crate::api::repo::transfer_owner::transfer_owner,
crate::api::repo::list_branches::list_branches,
crate::api::repo::create_branch::create_branch,
crate::api::repo::set_default_branch::set_default_branch,
crate::api::repo::set_branch_protection::set_branch_protection,
crate::api::repo::delete_branch::delete_branch,
crate::api::repo::list_tags::list_tags,
crate::api::repo::create_tag::create_tag,
crate::api::repo::delete_tag::delete_tag,
crate::api::repo::list_releases::list_releases,
crate::api::repo::create_release::create_release,
crate::api::repo::update_release::update_release,
crate::api::repo::delete_release::delete_release,
crate::api::repo::list_forks::list_forks,
crate::api::repo::fork_repo::fork_repo,
crate::api::repo::sync_fork::sync_fork,
crate::api::repo::star_repo::star_repo,
crate::api::repo::unstar_repo::unstar_repo,
crate::api::repo::list_stargazers::list_stargazers,
crate::api::repo::watch_repo::watch_repo,
crate::api::repo::unwatch_repo::unwatch_repo,
crate::api::repo::list_watchers::list_watchers,
crate::api::repo::list_members::list_members,
crate::api::repo::add_member::add_member,
crate::api::repo::update_member_role::update_member_role,
crate::api::repo::remove_member::remove_member,
crate::api::repo::leave_repo::leave_repo,
crate::api::repo::list_invitations::list_invitations,
crate::api::repo::create_invitation::create_invitation,
crate::api::repo::revoke_invitation::revoke_invitation,
crate::api::repo::accept_invitation::accept_invitation,
crate::api::repo::list_deploy_keys::list_deploy_keys,
crate::api::repo::add_deploy_key::add_deploy_key,
crate::api::repo::delete_deploy_key::delete_deploy_key,
crate::api::repo::list_webhooks::list_webhooks,
crate::api::repo::create_webhook::create_webhook,
crate::api::repo::update_webhook::update_webhook,
crate::api::repo::delete_webhook::delete_webhook,
crate::api::repo::list_protection_rules::list_protection_rules,
crate::api::repo::get_protection_rule::get_protection_rule,
crate::api::repo::match_protection::match_protection,
crate::api::repo::create_protection_rule::create_protection_rule,
crate::api::repo::update_protection_rule::update_protection_rule,
crate::api::repo::delete_protection_rule::delete_protection_rule,
crate::api::repo::check_branch_merge::check_branch_merge,
crate::api::repo::list_commit_statuses::list_commit_statuses,
crate::api::repo::create_commit_status::create_commit_status,
crate::api::repo::list_commit_comments::list_commit_comments,
crate::api::repo::create_commit_comment::create_commit_comment,
crate::api::repo::resolve_commit_comment::resolve_commit_comment,
crate::api::repo::get_stats::get_stats,
crate::api::repo::refresh_stats::refresh_stats,
),
components(schemas(
ApiEmptyResponse,
ApiErrorResponse,
ApiResponse<RsaResponse>,
ApiResponse<CaptchaResponse>,
ApiResponse<ContextMe>,
ApiResponse<RegisterEmailCodeResponse>,
ApiResponse<RegisterResponse>,
ApiResponse<EmailResponse>,
ApiResponse<Get2FAStatusResponse>,
ApiResponse<Enable2FAResponse>,
ApiResponse<Regenerate2FABackupCodesResponse>,
RsaResponse,
CaptchaQuery,
CaptchaResponse,
LoginParams,
ContextMe,
RegisterEmailCodeParams,
RegisterEmailCodeResponse,
RegisterParams,
RegisterResponse,
EmailResponse,
EmailChangeRequest,
EmailVerifyRequest,
ResetPasswordRequest,
ResetPasswordVerifyParams,
Get2FAStatusResponse,
Enable2FAResponse,
Verify2FAParams,
Disable2FAParams,
Regenerate2FABackupCodesRequest,
Regenerate2FABackupCodesResponse,
// User
ApiResponse<User>,
ApiResponse<UserAvatarResponse>,
ApiResponse<String>,
User,
UpdateUserAccountParams,
UploadUserAvatarParams,
UserAvatarResponse,
ApiResponse<UserAppearance>,
UserAppearance,
UpdateUserAppearanceParams,
ApiResponse<UserProfile>,
UserProfile,
UpdateUserProfileParams,
ApiResponse<UserNotifySetting>,
UserNotifySetting,
UpdateUserNotifySettingParams,
ApiResponse<UserSshKey>,
ApiResponse<Vec<UserSshKey>>,
UserSshKey,
AddSshKeyParams,
ApiResponse<UserGpgKey>,
ApiResponse<Vec<UserGpgKey>>,
UserGpgKey,
AddGpgKeyParams,
ApiResponse<UserSessionInfo>,
ApiResponse<Vec<UserSessionInfo>>,
UserSessionInfo,
ApiResponse<UserDevice>,
ApiResponse<Vec<UserDevice>>,
UserDevice,
ApiResponse<UserOAuthInfo>,
ApiResponse<Vec<UserOAuthInfo>>,
UserOAuthInfo,
ApiResponse<UserSecurityLog>,
ApiResponse<Vec<UserSecurityLog>>,
UserSecurityLog,
ApiResponse<UserPersonalAccessTokenInfo>,
ApiResponse<Vec<UserPersonalAccessTokenInfo>>,
UserPersonalAccessTokenInfo,
// Issues
ApiResponse<Issue>,
ApiResponse<Vec<Issue>>,
Issue,
CreateIssueParams,
IssueListFilters,
UpdateIssueParams,
LockIssueParams,
TransferIssueParams,
ApiResponse<IssueComment>,
ApiResponse<Vec<IssueComment>>,
IssueComment,
CreateCommentParams,
UpdateCommentParams,
ApiResponse<IssueLabel>,
ApiResponse<Vec<IssueLabel>>,
IssueLabel,
CreateLabelParams,
UpdateLabelParams,
ApiResponse<IssueLabelRelation>,
ApiResponse<Vec<IssueLabelRelation>>,
IssueLabelRelation,
ApiResponse<IssueMilestone>,
ApiResponse<Vec<IssueMilestone>>,
IssueMilestone,
CreateMilestoneParams,
UpdateMilestoneParams,
ApiResponse<IssueAssignee>,
ApiResponse<Vec<IssueAssignee>>,
IssueAssignee,
ApiResponse<IssueEvent>,
ApiResponse<Vec<IssueEvent>>,
IssueEvent,
ApiResponse<IssueReaction>,
ApiResponse<Vec<IssueReaction>>,
IssueReaction,
CreateIssueReactionParams,
ApiResponse<IssueSubscriber>,
ApiResponse<Vec<IssueSubscriber>>,
IssueSubscriber,
MuteIssueParams,
ApiResponse<IssueTemplate>,
ApiResponse<Vec<IssueTemplate>>,
IssueTemplate,
CreateTemplateParams,
UpdateTemplateParams,
ApiResponse<IssueRepoRelation>,
ApiResponse<Vec<IssueRepoRelation>>,
IssueRepoRelation,
LinkRepoParams,
ApiResponse<IssuePrRelation>,
ApiResponse<Vec<IssuePrRelation>>,
IssuePrRelation,
LinkPrParams,
// Workspaces
ApiResponse<Workspace>,
ApiResponse<Vec<Workspace>>,
ApiResponse<WorkspaceMember>,
ApiResponse<Vec<WorkspaceMember>>,
ApiResponse<CreateInvitationResponse>,
ApiResponse<Vec<WorkspaceInvitation>>,
ApiResponse<WorkspaceInvitation>,
ApiResponse<WorkspaceBilling>,
ApiResponse<WorkspaceCustomBranding>,
ApiResponse<WorkspaceSettings>,
ApiResponse<WorkspaceStats>,
ApiResponse<WorkspaceIntegration>,
ApiResponse<Vec<WorkspaceIntegration>>,
ApiResponse<WorkspaceWebhook>,
ApiResponse<Vec<WorkspaceWebhook>>,
ApiResponse<WorkspaceDomain>,
ApiResponse<Vec<WorkspaceDomain>>,
ApiResponse<WorkspacePendingApproval>,
ApiResponse<Vec<WorkspacePendingApproval>>,
ApiResponse<Vec<WorkspaceAuditLog>>,
Workspace,
CreateWorkspaceParams,
UpdateWorkspaceParams,
TransferOwnerRequest,
WorkspaceMember,
AddMemberParams,
UpdateMemberRoleParams,
WorkspaceInvitation,
CreateInvitationParams,
CreateInvitationResponse,
AcceptInvitationRequest,
WorkspaceBilling,
UpdateBillingParams,
WorkspaceCustomBranding,
UpdateBrandingParams,
WorkspaceSettings,
UpdateWorkspaceSettingsParams,
WorkspaceStats,
WorkspaceIntegration,
CreateIntegrationParams,
UpdateIntegrationParams,
WorkspaceWebhook,
CreateWebhookParams,
UpdateWebhookParams,
WorkspaceDomain,
AddDomainParams,
WorkspacePendingApproval,
RequestApprovalParams,
ReviewApprovalRequest,
WorkspaceAuditLog,
// Repos
ApiResponse<Repo>,
ApiResponse<Vec<Repo>>,
ApiResponse<RepoBranch>,
ApiResponse<Vec<RepoBranch>>,
ApiResponse<RepoTag>,
ApiResponse<Vec<RepoTag>>,
ApiResponse<RepoRelease>,
ApiResponse<Vec<RepoRelease>>,
ApiResponse<RepoFork>,
ApiResponse<Vec<RepoFork>>,
ApiResponse<RepoStar>,
ApiResponse<Vec<RepoStar>>,
ApiResponse<RepoWatch>,
ApiResponse<Vec<RepoWatch>>,
ApiResponse<RepoMember>,
ApiResponse<Vec<RepoMember>>,
ApiResponse<RepoInvitation>,
ApiResponse<Vec<RepoInvitation>>,
ApiResponse<RepoDeployKey>,
ApiResponse<Vec<RepoDeployKey>>,
ApiResponse<RepoWebhook>,
ApiResponse<Vec<RepoWebhook>>,
ApiResponse<BranchProtectionRule>,
ApiResponse<Vec<BranchProtectionRule>>,
ApiResponse<Option<BranchProtectionRule>>,
ApiResponse<BranchMergeCheck>,
ApiResponse<RepoCommitStatus>,
ApiResponse<Vec<RepoCommitStatus>>,
ApiResponse<RepoCommitComment>,
ApiResponse<Vec<RepoCommitComment>>,
ApiResponse<RepoStats>,
Repo,
CreateRepoParams,
UpdateRepoParams,
TransferOwnerParams,
RepoBranch,
CreateBranchParams,
SetBranchProtectionParams,
RepoTag,
CreateTagParams,
RepoRelease,
CreateReleaseParams,
UpdateReleaseParams,
RepoFork,
ForkRepoParams,
RepoStar,
RepoWatch,
WatchParams,
RepoMember,
AddRepoMemberParams,
UpdateRepoMemberRoleParams,
RepoInvitation,
CreateRepoInvitationParams,
AcceptInvitationParams,
RepoDeployKey,
AddDeployKeyParams,
RepoWebhook,
RepoCreateWebhookParams,
RepoUpdateWebhookParams,
BranchProtectionRule,
CreateProtectionRuleParams,
UpdateProtectionRuleParams,
BranchMergeCheck,
RepoCommitStatus,
CreateCommitStatusParams,
RepoCommitComment,
CreateCommitCommentParams,
RepoStats,
))
)]
pub struct OpenApiDoc;