netsky 0.2.0

netsky CLI: the viable system launcher and subcommand dispatcher
Documentation
use clap::Subcommand;

#[derive(Subcommand, Debug)]
#[command(subcommand_required = true, arg_required_else_help = true)]
pub enum TasksCommand {
    #[command(name = "ls", visible_alias = "list")]
    List {
        account: String,
    },
    Add {
        account: String,
        title: String,
        #[arg(long)]
        due: Option<String>,
    },
    Done {
        composite: String,
    },
    Rm {
        composite: String,
    },
}

pub fn run(cmd: TasksCommand) -> netsky_core::Result<()> {
    match cmd {
        TasksCommand::List { account } => {
            let value = netsky_channels::tasks::ops::list_tasks(&account, false)
                .map_err(|e| netsky_core::Error::Message(e.to_string()))?;
            println!(
                "{}",
                serde_json::to_string_pretty(&value)
                    .map_err(|e| netsky_core::Error::Message(e.to_string()))?
            );
        }
        TasksCommand::Add {
            account,
            title,
            due,
        } => {
            let id =
                netsky_channels::tasks::ops::create_task(&account, &title, due.as_deref(), None)
                    .map_err(|e| netsky_core::Error::Message(e.to_string()))?;
            println!("created: {id}");
        }
        TasksCommand::Done { composite } => {
            netsky_channels::tasks::ops::complete_task(&composite)
                .map_err(|e| netsky_core::Error::Message(e.to_string()))?;
            println!("completed: {composite}");
        }
        TasksCommand::Rm { composite } => {
            netsky_channels::tasks::ops::delete_task(&composite)
                .map_err(|e| netsky_core::Error::Message(e.to_string()))?;
            println!("deleted: {composite}");
        }
    }
    Ok(())
}