diff --git a/Cargo.lock b/Cargo.lock index c016487..023bff4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -136,15 +136,6 @@ dependencies = [ "backtrace", ] -[[package]] -name = "arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arc-swap" version = "1.7.1" @@ -520,8 +511,6 @@ dependencies = [ "tower", "tracing", "tracing-subscriber", - "utoipa", - "utoipa-swagger-ui", "validator", ] @@ -951,17 +940,6 @@ dependencies = [ "serde", ] -[[package]] -name = "derive_arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -1781,7 +1759,6 @@ checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown 0.15.2", - "serde", ] [[package]] @@ -1943,12 +1920,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" - [[package]] name = "log" version = "0.4.22" @@ -2001,16 +1972,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.7.2" @@ -3252,12 +3213,6 @@ dependencies = [ "rand_core", ] -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - [[package]] name = "simdutf8" version = "0.1.4" @@ -4045,51 +4000,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" -[[package]] -name = "utoipa" -version = "5.3.1" -source = "git+https://github.com/amtoaer/utoipa.git?tag=v1.0.1#6d66603333218fe4d0f36e40fc662628c6682a79" -dependencies = [ - "indexmap", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.3.1" -source = "git+https://github.com/amtoaer/utoipa.git?tag=v1.0.1#6d66603333218fe4d0f36e40fc662628c6682a79" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.96", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "9.0.0" -source = "git+https://github.com/amtoaer/utoipa.git?tag=v1.0.1#6d66603333218fe4d0f36e40fc662628c6682a79" -dependencies = [ - "axum", - "base64", - "mime_guess", - "regex", - "rust-embed-for-web", - "serde", - "serde_json", - "url", - "utoipa", - "utoipa-swagger-ui-vendored", - "zip", -] - -[[package]] -name = "utoipa-swagger-ui-vendored" -version = "0.1.2" -source = "git+https://github.com/amtoaer/utoipa.git?tag=v1.0.1#6d66603333218fe4d0f36e40fc662628c6682a79" - [[package]] name = "uuid" version = "1.8.0" @@ -4705,34 +4615,3 @@ dependencies = [ "quote", "syn 2.0.96", ] - -[[package]] -name = "zip" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd56a4d5921bc2f99947ac5b3abe5f510b1be7376fdc5e9fce4a23c6a93e87c" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap", - "memchr", - "thiserror 1.0.63", - "zopfli", -] - -[[package]] -name = "zopfli" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" -dependencies = [ - "bumpalo", - "crc32fast", - "lockfree-object-pool", - "log", - "once_cell", - "simd-adler32", -] diff --git a/Cargo.toml b/Cargo.toml index d3b4759..8e2e7ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,13 +71,6 @@ toml = "0.8.22" tower = "0.5.2" tracing = "0.1.41" tracing-subscriber = { version = "0.3.19", features = ["chrono"] } -utoipa = { git = "https://github.com/amtoaer/utoipa.git", tag = "v1.0.1", features = [ - "axum_extras", -] } -utoipa-swagger-ui = { git = "https://github.com/amtoaer/utoipa.git", tag = "v1.0.1", features = [ - "axum", - "vendored", -] } validator = { version = "0.20.0", features = ["derive"] } [workspace.metadata.release] diff --git a/crates/bili_sync/Cargo.toml b/crates/bili_sync/Cargo.toml index 7c8b12c..fb504ea 100644 --- a/crates/bili_sync/Cargo.toml +++ b/crates/bili_sync/Cargo.toml @@ -50,8 +50,6 @@ toml = { workspace = true } tower = { workspace = true } tracing = { workspace = true } tracing-subscriber = { workspace = true } -utoipa = { workspace = true } -utoipa-swagger-ui = { workspace = true } validator = { workspace = true } [dev-dependencies] diff --git a/crates/bili_sync/src/api/auth.rs b/crates/bili_sync/src/api/auth.rs index 0f9ef09..fcef48f 100644 --- a/crates/bili_sync/src/api/auth.rs +++ b/crates/bili_sync/src/api/auth.rs @@ -3,8 +3,6 @@ use axum::http::HeaderMap; use axum::middleware::Next; use axum::response::{IntoResponse, Response}; use reqwest::StatusCode; -use utoipa::Modify; -use utoipa::openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}; use crate::api::wrapper::ApiResponse; use crate::config::VersionedConfig; @@ -24,19 +22,3 @@ fn get_token(headers: &HeaderMap) -> Option { .and_then(|v| v.to_str().ok()) .map(Into::into) } - -pub(super) struct OpenAPIAuth; - -impl Modify for OpenAPIAuth { - fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) { - if let Some(schema) = openapi.components.as_mut() { - schema.add_security_scheme( - "Token", - SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::with_description( - "Authorization", - "与配置文件中的 auth_token 相同", - ))), - ); - } - } -} diff --git a/crates/bili_sync/src/api/handler.rs b/crates/bili_sync/src/api/handler.rs index 2a83289..bc4608d 100644 --- a/crates/bili_sync/src/api/handler.rs +++ b/crates/bili_sync/src/api/handler.rs @@ -15,11 +15,9 @@ use sea_orm::{ ColumnTrait, DatabaseConnection, EntityTrait, PaginatorTrait, QueryFilter, QueryOrder, QuerySelect, TransactionTrait, }; -use utoipa::OpenApi; use super::request::ImageProxyParams; use crate::adapter::_ActiveModel; -use crate::api::auth::OpenAPIAuth; use crate::api::error::InnerApiError; use crate::api::helper::{update_page_download_status, update_video_download_status}; use crate::api::request::{ @@ -38,20 +36,6 @@ use crate::config::{Config, VersionedConfig}; use crate::task::DOWNLOADER_TASK_RUNNING; use crate::utils::status::{PageStatus, VideoStatus}; -#[derive(OpenApi)] -#[openapi( - paths( - get_video_sources, get_video_sources_details, update_video_source, get_videos, get_video, reset_video, reset_all_videos, update_video_status, - get_created_favorites, get_followed_collections, get_followed_uppers, - insert_favorite, insert_collection, insert_submission - ), - modifiers(&OpenAPIAuth), - security( - ("Token" = []), - ) -)] -pub struct ApiDoc; - pub fn api_router() -> Router { Router::new() .route("/api/video-sources", get(get_video_sources)) @@ -74,13 +58,6 @@ pub fn api_router() -> Router { } /// 列出所有视频来源 -#[utoipa::path( - get, - path = "/api/video-sources", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_video_sources( Extension(db): Extension>, ) -> Result, ApiError> { @@ -124,16 +101,6 @@ pub async fn get_video_sources( } /// 列出视频的基本信息,支持根据视频来源筛选、名称查找和分页 -#[utoipa::path( - get, - path = "/api/videos", - params( - VideosRequest, - ), - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_videos( Extension(db): Extension>, Query(params): Query, @@ -169,14 +136,6 @@ pub async fn get_videos( })) } -/// 获取视频详细信息,包括关联的所有 page -#[utoipa::path( - get, - path = "/api/videos/{id}", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_video( Path(id): Path, Extension(db): Extension>, @@ -200,14 +159,6 @@ pub async fn get_video( })) } -/// 将某个视频与其所有分页的失败状态清空为未下载状态,这样在下次下载任务中会触发重试 -#[utoipa::path( - post, - path = "/api/videos/{id}/reset", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn reset_video( Path(id): Path, Extension(db): Extension>, @@ -268,14 +219,6 @@ pub async fn reset_video( })) } -/// 重置所有视频和页面的失败状态为未下载状态,这样在下次下载任务中会触发重试 -#[utoipa::path( - post, - path = "/api/videos/reset-all", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn reset_all_videos( Extension(db): Extension>, ) -> Result, ApiError> { @@ -333,15 +276,6 @@ pub async fn reset_all_videos( })) } -/// 更新特定视频及其所含分页的状态位 -#[utoipa::path( - post, - path = "/api/video/{id}/update-status", - request_body = UpdateVideoStatusRequest, - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn update_video_status( Path(id): Path, Extension(db): Extension>, @@ -399,14 +333,6 @@ pub async fn update_video_status( })) } -/// 获取当前用户创建的收藏夹列表,包含订阅状态 -#[utoipa::path( - get, - path = "/api/me/favorites", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_created_favorites( Extension(db): Extension>, Extension(bili_client): Extension>, @@ -445,17 +371,6 @@ pub async fn get_created_favorites( Ok(ApiResponse::ok(FavoritesResponse { favorites })) } -/// 获取当前用户关注的合集列表,包含订阅状态 -#[utoipa::path( - get, - path = "/api/me/collections", - params( - FollowedCollectionsRequest, - ), - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_followed_collections( Extension(db): Extension>, Extension(bili_client): Extension>, @@ -497,16 +412,6 @@ pub async fn get_followed_collections( })) } -#[utoipa::path( - get, - path = "/api/me/uppers", - params( - FollowedUppersRequest, - ), - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_followed_uppers( Extension(db): Extension>, Extension(bili_client): Extension>, @@ -547,14 +452,6 @@ pub async fn get_followed_uppers( })) } -#[utoipa::path( - post, - path = "/api/video-sources/favorites", - request_body = InsertFavoriteRequest, - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn insert_favorite( Extension(db): Extension>, Extension(bili_client): Extension>, @@ -574,14 +471,6 @@ pub async fn insert_favorite( Ok(ApiResponse::ok(true)) } -#[utoipa::path( - post, - path = "/api/video-sources/collections", - request_body = InsertCollectionRequest, - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn insert_collection( Extension(db): Extension>, Extension(bili_client): Extension>, @@ -611,15 +500,6 @@ pub async fn insert_collection( Ok(ApiResponse::ok(true)) } -/// 订阅UP主投稿 -#[utoipa::path( - post, - path = "/api/video-sources/submissions", - request_body = InsertSubmissionRequest, - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn insert_submission( Extension(db): Extension>, Extension(bili_client): Extension>, @@ -640,14 +520,6 @@ pub async fn insert_submission( Ok(ApiResponse::ok(true)) } -/// 获取所有视频源的详细信息,包括 path 和 enabled 状态 -#[utoipa::path( - get, - path = "/api/video-sources/details", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_video_sources_details( Extension(db): Extension>, ) -> Result, ApiError> { @@ -703,15 +575,6 @@ pub async fn get_video_sources_details( })) } -/// 更新视频源的 path 和 enabled 状态 -#[utoipa::path( - put, - path = "/api/video-sources/{type}/{id}", - request_body = UpdateVideoSourceRequest, - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn update_video_source( Path((source_type, id)): Path<(String, i32)>, Extension(db): Extension>, @@ -769,25 +632,10 @@ pub async fn update_video_source( Ok(ApiResponse::ok(true)) } -#[utoipa::path( - get, - path = "/api/config", - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn get_config() -> Result>, ApiError> { Ok(ApiResponse::ok(VersionedConfig::get().load_full())) } -#[utoipa::path( - put, - path = "/api/config", - request_body = Config, - responses( - (status = 200, body = ApiResponse), - ) -)] pub async fn update_config( Extension(db): Extension>, ValidatedJson(config): ValidatedJson, diff --git a/crates/bili_sync/src/api/request.rs b/crates/bili_sync/src/api/request.rs index 5f2c8a1..7c373c5 100644 --- a/crates/bili_sync/src/api/request.rs +++ b/crates/bili_sync/src/api/request.rs @@ -1,9 +1,8 @@ use serde::Deserialize; -use utoipa::{IntoParams, ToSchema}; use validator::Validate; use crate::bilibili::CollectionType; -#[derive(Deserialize, IntoParams)] +#[derive(Deserialize)] pub struct VideosRequest { pub collection: Option, pub favorite: Option, @@ -14,7 +13,7 @@ pub struct VideosRequest { pub page_size: Option, } -#[derive(Deserialize, Validate, ToSchema)] +#[derive(Deserialize, Validate)] pub struct StatusUpdate { #[validate(range(min = 0, max = 4))] pub status_index: usize, @@ -22,14 +21,14 @@ pub struct StatusUpdate { pub status_value: u32, } -#[derive(Deserialize, ToSchema, Validate)] +#[derive(Deserialize, Validate)] pub struct PageStatusUpdate { pub page_id: i32, #[validate(nested)] pub updates: Vec, } -#[derive(Deserialize, ToSchema, Validate)] +#[derive(Deserialize, Validate)] pub struct UpdateVideoStatusRequest { #[serde(default)] #[validate(nested)] @@ -39,49 +38,48 @@ pub struct UpdateVideoStatusRequest { pub page_updates: Vec, } -#[derive(Deserialize, IntoParams)] +#[derive(Deserialize)] pub struct FollowedCollectionsRequest { pub page_num: Option, pub page_size: Option, } -#[derive(Deserialize, IntoParams)] +#[derive(Deserialize)] pub struct FollowedUppersRequest { pub page_num: Option, pub page_size: Option, } -#[derive(Deserialize, ToSchema, Validate)] +#[derive(Deserialize, Validate)] pub struct InsertFavoriteRequest { pub fid: i64, #[validate(custom(function = "crate::utils::validation::validate_path"))] pub path: String, } -#[derive(Deserialize, ToSchema, Validate)] +#[derive(Deserialize, Validate)] pub struct InsertCollectionRequest { pub sid: i64, pub mid: i64, - #[schema(value_type = i8)] #[serde(default)] pub collection_type: CollectionType, #[validate(custom(function = "crate::utils::validation::validate_path"))] pub path: String, } -#[derive(Deserialize, ToSchema, Validate)] +#[derive(Deserialize, Validate)] pub struct InsertSubmissionRequest { pub upper_id: i64, #[validate(custom(function = "crate::utils::validation::validate_path"))] pub path: String, } -#[derive(Deserialize, IntoParams)] +#[derive(Deserialize)] pub struct ImageProxyParams { pub url: String, } -#[derive(Deserialize, ToSchema, Validate)] +#[derive(Deserialize, Validate)] pub struct UpdateVideoSourceRequest { #[validate(custom(function = "crate::utils::validation::validate_path"))] pub path: String, diff --git a/crates/bili_sync/src/api/response.rs b/crates/bili_sync/src/api/response.rs index 1052d22..6f21de8 100644 --- a/crates/bili_sync/src/api/response.rs +++ b/crates/bili_sync/src/api/response.rs @@ -1,11 +1,10 @@ use bili_sync_entity::*; use sea_orm::{DerivePartialModel, FromQueryResult}; use serde::Serialize; -use utoipa::ToSchema; use crate::utils::status::{PageStatus, VideoStatus}; -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct VideoSourcesResponse { pub collection: Vec, pub favorite: Vec, @@ -13,64 +12,62 @@ pub struct VideoSourcesResponse { pub watch_later: Vec, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct VideosResponse { pub videos: Vec, pub total_count: u64, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct VideoResponse { pub video: VideoInfo, pub pages: Vec, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct ResetVideoResponse { pub resetted: bool, pub video: VideoInfo, pub pages: Vec, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct ResetAllVideosResponse { pub resetted: bool, pub resetted_videos_count: usize, pub resetted_pages_count: usize, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct UpdateVideoStatusResponse { pub success: bool, pub video: VideoInfo, pub pages: Vec, } -#[derive(FromQueryResult, Serialize, ToSchema)] +#[derive(FromQueryResult, Serialize)] pub struct VideoSource { pub id: i32, pub name: String, } -#[derive(Serialize, ToSchema, DerivePartialModel, FromQueryResult)] +#[derive(Serialize, DerivePartialModel, FromQueryResult)] #[sea_orm(entity = "video::Entity")] pub struct VideoInfo { pub id: i32, pub name: String, pub upper_name: String, - #[schema(value_type = [u32; 5])] #[serde(serialize_with = "serde_video_download_status")] pub download_status: u32, } -#[derive(Serialize, ToSchema, DerivePartialModel, FromQueryResult)] +#[derive(Serialize, DerivePartialModel, FromQueryResult)] #[sea_orm(entity = "page::Entity")] pub struct PageInfo { pub id: i32, pub video_id: i32, pub pid: i32, pub name: String, - #[schema(value_type = [u32; 5])] #[serde(serialize_with = "serde_page_download_status")] pub download_status: u32, } @@ -91,7 +88,7 @@ where status.serialize(serializer) } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct FavoriteWithSubscriptionStatus { pub title: String, pub media_count: i64, @@ -100,7 +97,7 @@ pub struct FavoriteWithSubscriptionStatus { pub subscribed: bool, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct CollectionWithSubscriptionStatus { pub title: String, pub sid: i64, @@ -109,7 +106,7 @@ pub struct CollectionWithSubscriptionStatus { pub subscribed: bool, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct UpperWithSubscriptionStatus { pub mid: i64, pub uname: String, @@ -119,24 +116,24 @@ pub struct UpperWithSubscriptionStatus { pub subscribed: bool, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct FavoritesResponse { pub favorites: Vec, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct CollectionsResponse { pub collections: Vec, pub total: i64, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct UppersResponse { pub uppers: Vec, pub total: i64, } -#[derive(Serialize, ToSchema)] +#[derive(Serialize)] pub struct VideoSourcesDetailsResponse { pub collections: Vec, pub favorites: Vec, @@ -144,7 +141,7 @@ pub struct VideoSourcesDetailsResponse { pub watch_later: Vec, } -#[derive(Serialize, ToSchema, FromQueryResult)] +#[derive(Serialize, FromQueryResult)] pub struct VideoSourceDetail { pub id: i32, pub name: String, diff --git a/crates/bili_sync/src/api/wrapper.rs b/crates/bili_sync/src/api/wrapper.rs index 74628ba..9fe7fa3 100644 --- a/crates/bili_sync/src/api/wrapper.rs +++ b/crates/bili_sync/src/api/wrapper.rs @@ -8,12 +8,11 @@ use axum::response::IntoResponse; use reqwest::StatusCode; use serde::Serialize; use serde::de::DeserializeOwned; -use utoipa::ToSchema; use validator::Validate; use crate::api::error::InnerApiError; -#[derive(ToSchema, Serialize)] +#[derive(Serialize)] pub struct ApiResponse { status_code: u16, #[serde(skip_serializing_if = "Option::is_none")] diff --git a/crates/bili_sync/src/bilibili/analyzer.rs b/crates/bili_sync/src/bilibili/analyzer.rs index 79f24be..4bb3515 100644 --- a/crates/bili_sync/src/bilibili/analyzer.rs +++ b/crates/bili_sync/src/bilibili/analyzer.rs @@ -1,6 +1,5 @@ use anyhow::{Context, Result, bail}; use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; use crate::bilibili::error::BiliError; use crate::config::VersionedConfig; @@ -9,7 +8,7 @@ pub struct PageAnalyzer { info: serde_json::Value, } -#[derive(Debug, strum::FromRepr, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, ToSchema, Clone)] +#[derive(Debug, strum::FromRepr, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Clone)] pub enum VideoQuality { Quality360p = 16, Quality480p = 32, @@ -23,7 +22,7 @@ pub enum VideoQuality { Quality8k = 127, } -#[derive(Debug, Clone, Copy, strum::FromRepr, PartialEq, Eq, Serialize, Deserialize, ToSchema)] +#[derive(Debug, Clone, Copy, strum::FromRepr, PartialEq, Eq, Serialize, Deserialize)] pub enum AudioQuality { Quality64k = 30216, Quality132k = 30232, @@ -56,16 +55,7 @@ impl AudioQuality { #[allow(clippy::upper_case_acronyms)] #[derive( - Debug, - strum::EnumString, - strum::Display, - strum::AsRefStr, - PartialEq, - PartialOrd, - Serialize, - Deserialize, - ToSchema, - Clone, + Debug, strum::EnumString, strum::Display, strum::AsRefStr, PartialEq, PartialOrd, Serialize, Deserialize, Clone, )] pub enum VideoCodecs { #[strum(serialize = "hev")] @@ -91,7 +81,7 @@ impl TryFrom for VideoCodecs { } // 视频流的筛选偏好 -#[derive(Serialize, Deserialize, ToSchema, Clone)] +#[derive(Serialize, Deserialize, Clone)] pub struct FilterOption { pub video_max_quality: VideoQuality, pub video_min_quality: VideoQuality, diff --git a/crates/bili_sync/src/bilibili/credential.rs b/crates/bili_sync/src/bilibili/credential.rs index a363e05..36d1f33 100644 --- a/crates/bili_sync/src/bilibili/credential.rs +++ b/crates/bili_sync/src/bilibili/credential.rs @@ -10,7 +10,6 @@ use rsa::pkcs8::DecodePublicKey; use rsa::sha2::Sha256; use rsa::{Oaep, RsaPublicKey}; use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; use crate::bilibili::{Client, Validate}; @@ -20,7 +19,7 @@ const MIXIN_KEY_ENC_TAB: [usize; 64] = [ 20, 34, 44, 52, ]; -#[derive(Default, Debug, Clone, Serialize, Deserialize, ToSchema)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct Credential { pub sessdata: String, pub bili_jct: String, diff --git a/crates/bili_sync/src/bilibili/danmaku/canvas/mod.rs b/crates/bili_sync/src/bilibili/danmaku/canvas/mod.rs index 99f8743..9a73425 100644 --- a/crates/bili_sync/src/bilibili/danmaku/canvas/mod.rs +++ b/crates/bili_sync/src/bilibili/danmaku/canvas/mod.rs @@ -4,14 +4,13 @@ mod lane; use anyhow::Result; use float_ord::FloatOrd; use lane::Lane; -use utoipa::ToSchema; use crate::bilibili::PageInfo; use crate::bilibili::danmaku::canvas::lane::Collision; use crate::bilibili::danmaku::danmu::DanmuType; use crate::bilibili::danmaku::{Danmu, DrawEffect, Drawable}; -#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, ToSchema)] +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] pub struct DanmakuOption { pub duration: f64, pub font: String, diff --git a/crates/bili_sync/src/config/current.rs b/crates/bili_sync/src/config/current.rs index 0710118..c682c16 100644 --- a/crates/bili_sync/src/config/current.rs +++ b/crates/bili_sync/src/config/current.rs @@ -4,7 +4,6 @@ use std::sync::LazyLock; use anyhow::{Result, bail}; use sea_orm::DatabaseConnection; use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; use validator::Validate; use crate::bilibili::{Credential, DanmakuOption, FilterOption}; @@ -16,7 +15,7 @@ use crate::utils::model::{load_db_config, save_db_config}; pub static CONFIG_DIR: LazyLock = LazyLock::new(|| dirs::config_dir().expect("No config path found").join("bili-sync")); -#[derive(Serialize, Deserialize, ToSchema, Validate, Clone)] +#[derive(Serialize, Deserialize, Validate, Clone)] pub struct Config { pub auth_token: String, pub bind_address: String, @@ -26,7 +25,6 @@ pub struct Config { pub video_name: String, pub page_name: String, pub interval: u64, - #[schema(value_type = String)] pub upper_path: PathBuf, pub nfo_time_type: NFOTimeType, pub concurrent_limit: ConcurrentLimit, diff --git a/crates/bili_sync/src/config/item.rs b/crates/bili_sync/src/config/item.rs index c7095ec..46ebfd0 100644 --- a/crates/bili_sync/src/config/item.rs +++ b/crates/bili_sync/src/config/item.rs @@ -2,7 +2,6 @@ use std::path::PathBuf; use anyhow::Result; use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; use crate::utils::filenamify::filenamify; @@ -14,7 +13,7 @@ pub struct WatchLaterConfig { } /// NFO 文件使用的时间类型 -#[derive(Serialize, Deserialize, Default, ToSchema, Clone)] +#[derive(Serialize, Deserialize, Default, Clone)] #[serde(rename_all = "lowercase")] pub enum NFOTimeType { #[default] @@ -23,7 +22,7 @@ pub enum NFOTimeType { } /// 并发下载相关的配置 -#[derive(Serialize, Deserialize, ToSchema, Clone)] +#[derive(Serialize, Deserialize, Clone)] pub struct ConcurrentLimit { pub video: usize, pub page: usize, @@ -32,7 +31,7 @@ pub struct ConcurrentLimit { pub download: ConcurrentDownloadLimit, } -#[derive(Serialize, Deserialize, ToSchema, Clone)] +#[derive(Serialize, Deserialize, Clone)] pub struct ConcurrentDownloadLimit { pub enable: bool, pub concurrency: usize, @@ -49,7 +48,7 @@ impl Default for ConcurrentDownloadLimit { } } -#[derive(Serialize, Deserialize, ToSchema, Clone)] +#[derive(Serialize, Deserialize, Clone)] pub struct RateLimit { pub limit: usize, pub duration: u64, diff --git a/crates/bili_sync/src/task/http_server.rs b/crates/bili_sync/src/task/http_server.rs index 18c96e3..d175603 100644 --- a/crates/bili_sync/src/task/http_server.rs +++ b/crates/bili_sync/src/task/http_server.rs @@ -9,11 +9,9 @@ use axum::{Extension, Router, ServiceExt, middleware}; use reqwest::StatusCode; use rust_embed_for_web::{EmbedableFile, RustEmbed}; use sea_orm::DatabaseConnection; -use utoipa::OpenApi; -use utoipa_swagger_ui::{Config, SwaggerUi}; use crate::api::auth; -use crate::api::handler::{ApiDoc, api_router}; +use crate::api::handler::api_router; use crate::bilibili::BiliClient; use crate::config::VersionedConfig; @@ -26,16 +24,6 @@ struct Asset; pub async fn http_server(database_connection: Arc, bili_client: Arc) -> Result<()> { let app = Router::new() .merge(api_router()) - .merge( - SwaggerUi::new("/swagger-ui/") - .url("/api-docs/openapi.json", ApiDoc::openapi()) - .config( - Config::default() - .try_it_out_enabled(true) - .persist_authorization(true) - .validator_url("none"), - ), - ) .fallback_service(get(frontend_files)) .layer(Extension(database_connection)) .layer(Extension(bili_client))