pigeon-cli 0.4.0

Pigeon: authenticate, sink, and transform personal data from external services.
Documentation
use crate::commands::job::cli::{JobCommands, JobType};
use crate::commands::job::{
    decrypt_files, deduplicate, email_pull, email_sync, import, pull_transform, reduce,
};
use crate::core::observability::Observable as _;

pub fn dispatch(command: JobCommands) -> i32 {
    match command {
        JobCommands::Run(run_args) => {
            let name = run_args.job_type.command_name();
            let job_name = run_args.job_type.job_name();
            crate::observability::run_instrumented(name, move || match run_args.job_type {
                JobType::EmailSync {
                    identities,
                    local_output,
                    remote_output,
                    encryption_key,
                    concurrency,
                    upload_concurrency,
                    max_connections_per_identity,
                    upload_only,
                    report_bucket,
                    yes,
                } => email_sync::wizard::dispatch(
                    identities,
                    local_output,
                    remote_output,
                    encryption_key,
                    concurrency,
                    upload_concurrency,
                    max_connections_per_identity,
                    upload_only,
                    report_bucket,
                    job_name,
                    yes,
                ),
                JobType::EmailPull {
                    identities,
                    local_output,
                    remote_output,
                    concurrency,
                    upload_concurrency,
                    max_connections_per_identity,
                    upload_only,
                    report_bucket,
                    yes,
                } => email_pull::wizard::dispatch(
                    identities,
                    local_output,
                    remote_output,
                    concurrency,
                    upload_concurrency,
                    max_connections_per_identity,
                    upload_only,
                    report_bucket,
                    job_name,
                    yes,
                ),
                JobType::Deduplicate {
                    source_bucket,
                    local_output,
                    remote_output,
                    concurrency,
                    upload_concurrency,
                    upload_only,
                    report_bucket,
                    yes,
                } => deduplicate::wizard::dispatch(
                    source_bucket,
                    local_output,
                    remote_output,
                    concurrency,
                    upload_concurrency,
                    upload_only,
                    report_bucket,
                    job_name,
                    yes,
                ),
                JobType::Reduce {
                    source_bucket,
                    local_output,
                    remote_output,
                    concurrency,
                    upload_concurrency,
                    upload_only,
                    force_valuable,
                    force_reproducible,
                    report_bucket,
                    yes,
                } => reduce::wizard::dispatch(
                    source_bucket,
                    local_output,
                    remote_output,
                    concurrency,
                    upload_concurrency,
                    upload_only,
                    force_valuable,
                    force_reproducible,
                    report_bucket,
                    job_name,
                    yes,
                ),
                JobType::Import {
                    source,
                    destination,
                    local_output,
                    report_bucket,
                    yes,
                } => import::wizard::dispatch(
                    source,
                    destination,
                    local_output,
                    report_bucket,
                    job_name,
                    yes,
                ),
                JobType::DecryptFiles {
                    input_dir,
                    output_dir,
                    encryption_key,
                    concurrency,
                    report_bucket,
                    yes,
                } => decrypt_files::wizard::dispatch(
                    input_dir,
                    output_dir,
                    encryption_key,
                    concurrency,
                    report_bucket,
                    job_name,
                    yes,
                ),
                JobType::PullTransform {
                    source_bucket,
                    local_output,
                    remote_output,
                    encryption_key,
                    file_types,
                    expand_zips,
                    image_format,
                    video_format,
                    audio_format,
                    concurrency,
                    upload_concurrency,
                    upload_only,
                    report_bucket,
                    yes,
                } => pull_transform::wizard::dispatch(
                    source_bucket,
                    local_output,
                    remote_output,
                    encryption_key,
                    file_types,
                    expand_zips,
                    image_format,
                    video_format,
                    audio_format,
                    concurrency,
                    upload_concurrency,
                    upload_only,
                    report_bucket,
                    job_name,
                    yes,
                ),
            })
        }
    }
}