commit - 22f3db115f6e65409686585dec21726d86af2078
commit + 0b00f842a93119c9db440d2c8b9d95863a804933
blob - 0d15980c1d692de242b85fa01246d6a27b7e0b54
blob + ec6b70468754100e7acd479eefaf2770236cb2b8
--- src/cli.rs
+++ src/cli.rs
#[clap(version = VERSION)]
#[clap(about = "Fetch RSS Feeds and send them via E-Mail")]
pub struct Cli {
- // TODO: replace with default value instead of specifying an `Option`
/// Custom path to database
- #[clap(long = "database", value_parser)]
- pub database_path: Option<PathBuf>,
- // TODO: replace with default value instead of specifying an `Option`
+ #[clap(long = "database", value_parser, default_value_t = database_path().into_os_string().into_string().unwrap())]
+ pub database_path: String,
/// Custom path to configuration
- #[clap(long = "config", value_parser)]
- pub config_path: Option<PathBuf>,
- // TODO: replace with default value instead of specifying an `Option`
+ #[clap(long = "config", value_parser, default_value_t = config_path().into_os_string().into_string().unwrap())]
+ pub config_path: String,
/// Custom path to URLs with RSS feeds being fetched
- #[clap(long = "urls", value_parser)]
- pub urls_path: Option<PathBuf>,
+ #[clap(long = "urls", value_parser, default_value_t = urls_path().into_os_string().into_string().unwrap())]
+ pub urls_path: String,
/// Don't send E-Mails
#[clap(long, value_parser)]
pub dry_run: bool,
pub fn build_app() -> anyhow::Result<Self> {
use std::fs::{self, File};
- let mut args = Cli::parse();
+ let args = Cli::parse();
let c_dir = config_dir();
// ensure project config directory exists
fs::create_dir(c_dir)?;
}
- if args.database_path.is_none() {
- let db_path = database_path();
- args.database_path = Some(db_path.clone());
-
- if File::open(&db_path).is_err() {
- debug!(
- "No database file exists, creating a new one: {:?}",
- &db_path
- );
- File::create(&db_path)?;
- }
+ if File::open(&args.database_path).is_err() {
+ debug!(
+ "No database file exists, creating a new one: {:?}",
+ &args.database_path
+ );
+ File::create(&args.database_path)?;
}
- if args.config_path.is_none() {
- args.config_path = Some(config_path());
- }
- if args.urls_path.is_none() {
- args.urls_path = Some(urls_path());
- }
Ok(args)
}
}
/// Returns the path to the database.
+#[allow(dead_code)]
fn database_path() -> PathBuf {
config_dir().join("cache.db")
}
/// Returns the path to the configuration file.
+#[allow(dead_code)]
fn config_path() -> PathBuf {
config_dir().join("config.toml")
}
/// Returns the path to the urls file.
+#[allow(dead_code)]
fn urls_path() -> PathBuf {
config_dir().join("urls")
}
blob - 71b2582db946f14d1e77d93c552355e4bd452be9
blob + 69948f7fe6a4e1dd33ce2ce838b005b6803751ab
--- src/main.rs
+++ src/main.rs
async fn main() -> anyhow::Result<()> {
env_logger::init();
- // NOTE: `build_app` ensures all `Option`s in `args` to be `Some`, so unwrapping the values
- // should be fine
let args = cli::Cli::build_app()?;
-
- let config = Arc::new(Config::new(args.config_path.unwrap())?);
-
+ let config = Arc::new(Config::new(args.config_path)?);
let urls = BufReader::new(
- File::open(args.urls_path.as_ref().unwrap()).context(format!(
- "File {:?} does not exist",
- &args.urls_path.unwrap()
- ))?,
+ File::open(args.urls_path.as_str())
+ .context(format!("File {:?} does not exist", &args.urls_path))?,
)
.lines()
.map(|l| l.unwrap())
.filter(|l| !l.starts_with('#'));
- let db_path = args.database_path.unwrap();
+ let db_path = args.database_path;
debug!("Establishing connection to database at {:?}", db_path);
let pool = SqlitePoolOptions::new()
.max_connections(5)
- .connect(db_path.to_str().unwrap())
+ .connect(db_path.as_str())
.await?;
sqlx::migrate!("./migrations").run(&pool).await?;