amagi 0.1.3

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::DouyinRunTask;
use crate::error::AppError;
use crate::output::Printer;

pub(super) async fn run_task(
    printer: &Printer,
    client: &AmagiClient,
    task: &DouyinRunTask,
) -> Result<(), AppError> {
    match task {
        DouyinRunTask::ParseWork { aweme_id } => {
            let result = client.douyin_fetcher().parse_work(aweme_id).await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "parseWork",
                aweme_id = aweme_id.as_str(),
                "cli fetch completed"
            );
        }
        DouyinRunTask::VideoWork { aweme_id } => {
            let result = client.douyin_fetcher().fetch_video_work(aweme_id).await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "videoWork",
                aweme_id = aweme_id.as_str(),
                "cli fetch completed"
            );
        }
        DouyinRunTask::ImageAlbumWork { aweme_id } => {
            let result = client
                .douyin_fetcher()
                .fetch_image_album_work(aweme_id)
                .await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "imageAlbumWork",
                aweme_id = aweme_id.as_str(),
                "cli fetch completed"
            );
        }
        DouyinRunTask::SlidesWork { aweme_id } => {
            let result = client.douyin_fetcher().fetch_slides_work(aweme_id).await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "slidesWork",
                aweme_id = aweme_id.as_str(),
                "cli fetch completed"
            );
        }
        DouyinRunTask::TextWork { aweme_id } => {
            let result = client.douyin_fetcher().fetch_text_work(aweme_id).await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "textWork",
                aweme_id = aweme_id.as_str(),
                "cli fetch completed"
            );
        }
        DouyinRunTask::MusicInfo { music_id } => {
            let result = client.douyin_fetcher().fetch_music_info(music_id).await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "musicInfo",
                music_id = music_id.as_str(),
                "cli fetch completed"
            );
        }
        DouyinRunTask::DanmakuList {
            aweme_id,
            duration,
            start_time,
            end_time,
        } => {
            let result = client
                .douyin_fetcher()
                .fetch_danmaku_list(aweme_id, *duration, *start_time, *end_time)
                .await?;
            printer.print_payload(&result)?;
            info!(
                app = APP_NAME,
                mode = "cli",
                platform = "douyin",
                method = "danmakuList",
                aweme_id = aweme_id.as_str(),
                "cli fetch completed"
            );
        }
        _ => unreachable!("unsupported douyin content task"),
    }

    Ok(())
}