use clap::Subcommand;
#[derive(Subcommand, Debug)]
#[command(subcommand_required = true, arg_required_else_help = true)]
pub enum CalendarCommand {
#[command(name = "ls", visible_alias = "list")]
List,
Events {
account: String,
#[arg(long = "from")]
from_ts: Option<String>,
#[arg(long = "to")]
to_ts: Option<String>,
},
Get {
composite: String,
},
Add {
account: String,
#[arg(long)]
summary: String,
#[arg(long)]
start: String,
#[arg(long)]
end: String,
},
Rm {
composite: String,
},
}
pub fn run(cmd: CalendarCommand) -> netsky_core::Result<()> {
match cmd {
CalendarCommand::List => print_json(netsky_channels::calendar::ops::list_calendars())?,
CalendarCommand::Events {
account,
from_ts,
to_ts,
} => print_json(netsky_channels::calendar::ops::list_events(
&account,
from_ts.as_deref(),
to_ts.as_deref(),
None,
None,
))?,
CalendarCommand::Get { composite } => {
print_json(netsky_channels::calendar::ops::get_event(&composite))?
}
CalendarCommand::Add {
account,
summary,
start,
end,
} => {
let id = netsky_channels::calendar::ops::create_event(
&account, &summary, &start, &end, None, None,
)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?;
println!("created: {id}");
}
CalendarCommand::Rm { composite } => {
netsky_channels::calendar::ops::delete_event(&composite)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?;
println!("deleted: {composite}");
}
}
Ok(())
}
fn print_json<T: serde::Serialize>(value: anyhow::Result<T>) -> netsky_core::Result<()> {
let value = value.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()))?
);
Ok(())
}