amagi 0.1.2

Rust SDK, CLI, and Web API service skeleton for multi-platform social web adapters.
Documentation
//! Axum router construction for web metadata and data endpoints.

use axum::{
    Router,
    routing::{get, post},
};
use tower_http::trace::{DefaultMakeSpan, DefaultOnResponse, TraceLayer};
use tracing::Level;

use super::handlers;
use super::state::AppState;

/// Build the web router for metadata, catalog, and migrated data endpoints.
pub fn build(state: AppState) -> Router {
    Router::new()
        .route("/", get(handlers::root))
        .route("/health", get(handlers::health))
        .route("/api/spec", get(handlers::api_catalog))
        .route(
            "/api/bilibili/video/{bvid}",
            get(handlers::bilibili_video_info),
        )
        .route(
            "/api/bilibili/video/{aid}/stream",
            get(handlers::bilibili_video_stream),
        )
        .route(
            "/api/bilibili/video/{cid}/danmaku",
            get(handlers::bilibili_video_danmaku),
        )
        .route(
            "/api/bilibili/bangumi/{bangumi_id}",
            get(handlers::bilibili_bangumi_info),
        )
        .route(
            "/api/bilibili/bangumi/{ep_id}/stream",
            get(handlers::bilibili_bangumi_stream),
        )
        .route(
            "/api/bilibili/article/{id}/content",
            get(handlers::bilibili_article_content),
        )
        .route(
            "/api/bilibili/article/cards",
            get(handlers::bilibili_article_cards),
        )
        .route(
            "/api/bilibili/article/{id}",
            get(handlers::bilibili_article_info),
        )
        .route(
            "/api/bilibili/article-list/{id}",
            get(handlers::bilibili_article_list_info),
        )
        .route(
            "/api/bilibili/captcha",
            post(handlers::bilibili_captcha_from_voucher),
        )
        .route(
            "/api/bilibili/captcha/validate",
            post(handlers::bilibili_validate_captcha),
        )
        .route(
            "/api/bilibili/user/{host_mid}",
            get(handlers::bilibili_user_card),
        )
        .route(
            "/api/bilibili/user/{host_mid}/dynamics",
            get(handlers::bilibili_user_dynamic_list),
        )
        .route(
            "/api/bilibili/user/{host_mid}/space",
            get(handlers::bilibili_user_space_info),
        )
        .route(
            "/api/bilibili/user/{host_mid}/total-views",
            get(handlers::bilibili_uploader_total_views),
        )
        .route(
            "/api/bilibili/comments/{oid}",
            get(handlers::bilibili_comments),
        )
        .route(
            "/api/bilibili/comment-replies/{oid}/{root}",
            get(handlers::bilibili_comment_replies),
        )
        .route(
            "/api/bilibili/dynamic/{dynamic_id}",
            get(handlers::bilibili_dynamic_detail),
        )
        .route(
            "/api/bilibili/dynamic/{dynamic_id}/card",
            get(handlers::bilibili_dynamic_card),
        )
        .route(
            "/api/bilibili/live/{room_id}",
            get(handlers::bilibili_live_room_info),
        )
        .route(
            "/api/bilibili/live/{room_id}/init",
            get(handlers::bilibili_live_room_init),
        )
        .route(
            "/api/bilibili/auth/status",
            get(handlers::bilibili_login_status),
        )
        .route(
            "/api/bilibili/auth/qrcode",
            get(handlers::bilibili_login_qrcode),
        )
        .route(
            "/api/bilibili/auth/qrcode/status",
            get(handlers::bilibili_qrcode_status),
        )
        .route("/api/bilibili/emoji", get(handlers::bilibili_emoji_list))
        .route(
            "/api/bilibili/convert/av/{aid}",
            get(handlers::bilibili_av_to_bv),
        )
        .route(
            "/api/bilibili/convert/bv/{bvid}",
            get(handlers::bilibili_bv_to_av),
        )
        .route(
            "/api/douyin/work/{aweme_id}",
            get(handlers::douyin_parse_work),
        )
        .route(
            "/api/douyin/work/{aweme_id}/video",
            get(handlers::douyin_video_work),
        )
        .route(
            "/api/douyin/work/{aweme_id}/image-album",
            get(handlers::douyin_image_album_work),
        )
        .route(
            "/api/douyin/work/{aweme_id}/slides",
            get(handlers::douyin_slides_work),
        )
        .route(
            "/api/douyin/work/{aweme_id}/text",
            get(handlers::douyin_text_work),
        )
        .route(
            "/api/douyin/comments/{aweme_id}",
            get(handlers::douyin_work_comments),
        )
        .route(
            "/api/douyin/comment-replies/{aweme_id}/{comment_id}",
            get(handlers::douyin_comment_replies),
        )
        .route("/api/douyin/emoji", get(handlers::douyin_emoji_list))
        .route(
            "/api/douyin/emoji/dynamic",
            get(handlers::douyin_dynamic_emoji_list),
        )
        .route(
            "/api/douyin/user/{sec_uid}",
            get(handlers::douyin_user_profile),
        )
        .route(
            "/api/douyin/user/{sec_uid}/videos",
            get(handlers::douyin_user_video_list),
        )
        .route(
            "/api/douyin/user/{sec_uid}/favorites",
            get(handlers::douyin_user_favorite_list),
        )
        .route(
            "/api/douyin/user/{sec_uid}/recommends",
            get(handlers::douyin_user_recommend_list),
        )
        .route("/api/douyin/search", get(handlers::douyin_search))
        .route(
            "/api/douyin/search/suggest",
            get(handlers::douyin_suggest_words),
        )
        .route(
            "/api/douyin/music/{music_id}",
            get(handlers::douyin_music_info),
        )
        .route(
            "/api/douyin/live/{room_id}",
            get(handlers::douyin_live_room_info),
        )
        .route(
            "/api/douyin/auth/qrcode",
            get(handlers::douyin_login_qrcode),
        )
        .route(
            "/api/douyin/danmaku/{aweme_id}",
            get(handlers::douyin_danmaku_list),
        )
        .route(
            "/api/kuaishou/work/{photo_id}",
            get(handlers::kuaishou_video_work),
        )
        .route(
            "/api/kuaishou/comments/{photo_id}",
            get(handlers::kuaishou_work_comments),
        )
        .route("/api/kuaishou/emoji", get(handlers::kuaishou_emoji_list))
        .route(
            "/api/kuaishou/user/{principal_id}",
            get(handlers::kuaishou_user_profile),
        )
        .route(
            "/api/kuaishou/user/{principal_id}/works",
            get(handlers::kuaishou_user_work_list),
        )
        .route(
            "/api/kuaishou/live/{principal_id}",
            get(handlers::kuaishou_live_room_info),
        )
        .route(
            "/api/twitter/user/{screen_name}",
            get(handlers::twitter_user_profile),
        )
        .route(
            "/api/twitter/user/{screen_name}/timeline",
            get(handlers::twitter_user_timeline),
        )
        .route(
            "/api/twitter/user/{screen_name}/replies",
            get(handlers::twitter_user_replies),
        )
        .route(
            "/api/twitter/user/{screen_name}/media",
            get(handlers::twitter_user_media),
        )
        .route(
            "/api/twitter/user/{screen_name}/followers",
            get(handlers::twitter_user_followers),
        )
        .route(
            "/api/twitter/user/{screen_name}/following",
            get(handlers::twitter_user_following),
        )
        .route("/api/twitter/user/likes", get(handlers::twitter_user_likes))
        .route(
            "/api/twitter/user/bookmarks",
            get(handlers::twitter_user_bookmarks),
        )
        .route(
            "/api/twitter/user/followed",
            get(handlers::twitter_user_followed),
        )
        .route(
            "/api/twitter/user/recommended",
            get(handlers::twitter_user_recommended),
        )
        .route(
            "/api/twitter/search/tweets",
            get(handlers::twitter_search_tweets),
        )
        .route(
            "/api/twitter/search/users",
            get(handlers::twitter_search_users),
        )
        .route(
            "/api/twitter/tweet/{tweet_id}",
            get(handlers::twitter_tweet_detail),
        )
        .route(
            "/api/twitter/tweet/{tweet_id}/replies",
            get(handlers::twitter_tweet_replies),
        )
        .route(
            "/api/twitter/tweet/{tweet_id}/likers",
            get(handlers::twitter_tweet_likers),
        )
        .route(
            "/api/twitter/tweet/{tweet_id}/retweeters",
            get(handlers::twitter_tweet_retweeters),
        )
        .route(
            "/api/twitter/space/{space_id}",
            get(handlers::twitter_space_detail),
        )
        .route(
            "/api/xiaohongshu/feed",
            get(handlers::xiaohongshu_home_feed),
        )
        .route(
            "/api/xiaohongshu/note/{note_id}",
            get(handlers::xiaohongshu_note_detail),
        )
        .route(
            "/api/xiaohongshu/comments/{note_id}",
            get(handlers::xiaohongshu_note_comments),
        )
        .route(
            "/api/xiaohongshu/user/{user_id}",
            get(handlers::xiaohongshu_user_profile),
        )
        .route(
            "/api/xiaohongshu/user/{user_id}/notes",
            get(handlers::xiaohongshu_user_note_list),
        )
        .route(
            "/api/xiaohongshu/emoji",
            get(handlers::xiaohongshu_emoji_list),
        )
        .route(
            "/api/xiaohongshu/search",
            get(handlers::xiaohongshu_search_notes),
        )
        .route(
            "/api/spec/{platform}",
            get(handlers::platform_catalog_by_name),
        )
        .layer(
            TraceLayer::new_for_http()
                .make_span_with(DefaultMakeSpan::new().level(Level::INFO))
                .on_response(DefaultOnResponse::new().level(Level::INFO)),
        )
        .with_state(state)
}