mod cli; mod config; mod server; use clap::Parser; use std::{fmt::Write, process::ExitCode}; const DB_FILENAME: &str = "otter.sqlite3"; pub trait ErrorExt: std::error::Error { /// Return the full chain of error messages fn stack(&self) -> String { let mut msg = format!("{}", self); let mut err = self.source(); while let Some(src) = err { write!(msg, " - {}", src).unwrap(); err = src.source(); } msg } } impl ErrorExt for E {} fn main() -> ExitCode { let args = cli::Cli::parse(); ExitCode::from(args.run()) }