himalaya/src/main.rs
2024-01-07 23:48:45 +01:00

61 lines
2 KiB
Rust

use anyhow::Result;
use clap::Parser;
use env_logger::{Builder as LoggerBuilder, Env, DEFAULT_FILTER_ENV};
#[cfg(any(feature = "envelope-list", feature = "message-mailto"))]
use himalaya::config::TomlConfig;
#[cfg(feature = "envelope-list")]
use himalaya::envelope::command::list::ListEnvelopesCommand;
#[cfg(feature = "message-mailto")]
use himalaya::message::command::mailto::MessageMailtoCommand;
use himalaya::{cli::Cli, printer::StdoutPrinter};
use log::{debug, warn};
#[tokio::main]
async fn main() -> Result<()> {
#[cfg(not(target_os = "windows"))]
if let Err((_, err)) = coredump::register_panic_handler() {
warn!("cannot register coredump panic handler: {err}");
debug!("{err:?}");
}
LoggerBuilder::new()
.parse_env(Env::new().filter_or(DEFAULT_FILTER_ENV, "warn"))
.format_timestamp(None)
.init();
#[cfg(feature = "message-mailto")]
// if the first argument starts by "mailto:", execute straight the
// mailto message command
if let Some(ref url) = std::env::args()
.nth(1)
.filter(|arg| arg.starts_with("mailto:"))
{
let mut printer = StdoutPrinter::default();
let config = TomlConfig::from_default_paths().await?;
return MessageMailtoCommand::new(url)?
.execute(&mut printer, &config)
.await;
}
let cli = Cli::parse();
let mut printer = StdoutPrinter::new(cli.output, cli.color);
#[cfg(feature = "envelope-list")]
match cli.command {
Some(cmd) => return cmd.execute(&mut printer, cli.config_path.as_ref()).await,
None => {
let config = TomlConfig::from_some_path_or_default(cli.config_path.as_ref()).await?;
return ListEnvelopesCommand::default()
.execute(&mut printer, &config)
.await;
}
}
#[cfg(not(feature = "envelope-list"))]
return cli
.command
.execute(&mut printer, cli.config_path.as_ref())
.await;
}