amagi 0.1.1

Rust SDK, CLI, and Web API service skeleton for multi-platform social web adapters.
Documentation
use tracing::info;

use crate::APP_NAME;
use crate::client::AmagiClient;
use crate::config::BilibiliRunTask;
use crate::error::AppError;
use crate::output::Printer;

pub(super) async fn run_task(
    printer: &Printer,
    client: &AmagiClient,
    task: &BilibiliRunTask,
) -> Result<(), AppError> {
    match task {
        BilibiliRunTask::LoginStatus => {
            let result = client.bilibili_fetcher().fetch_login_status().await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "bilibili",
                method = "loginStatus",
                "cli fetch completed"
            );
        }
        BilibiliRunTask::LoginQrcode => {
            let result = client.bilibili_fetcher().request_login_qrcode().await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "bilibili",
                method = "loginQrcode",
                "cli fetch completed"
            );
        }
        BilibiliRunTask::QrcodeStatus { qrcode_key } => {
            let result = client
                .bilibili_fetcher()
                .check_qrcode_status(qrcode_key)
                .await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "bilibili",
                method = "qrcodeStatus",
                "cli fetch completed"
            );
        }
        BilibiliRunTask::EmojiList => {
            let result = client.bilibili_fetcher().fetch_emoji_list().await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "bilibili",
                method = "emojiList",
                "cli fetch completed"
            );
        }
        BilibiliRunTask::CaptchaFromVoucher { v_voucher, csrf } => {
            let result = client
                .bilibili_fetcher()
                .request_captcha_from_voucher(v_voucher, csrf.as_deref())
                .await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "bilibili",
                method = "captchaFromVoucher",
                "cli fetch completed"
            );
        }
        BilibiliRunTask::ValidateCaptcha {
            challenge,
            token,
            validate,
            seccode,
            csrf,
        } => {
            let result = client
                .bilibili_fetcher()
                .validate_captcha_result(challenge, token, validate, seccode, csrf.as_deref())
                .await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "bilibili",
                method = "validateCaptcha",
                "cli fetch completed"
            );
        }
        _ => unreachable!("unsupported bilibili auth task"),
    }

    Ok(())
}