diff --git a/src/cli_user_choices.rs b/src/cli_user_choices.rs index 0293910..ca1430d 100644 --- a/src/cli_user_choices.rs +++ b/src/cli_user_choices.rs @@ -93,16 +93,16 @@ fn _get_path() -> Result<(String, bool), Box> { rl.helper_mut().unwrap().colored_prompt = format!("\x1b[1;32m{}\x1b[0m", p); let readline = rl.readline(">> "); - fn begins_with_tilde(unchecked_path: &String) -> bool { - match unchecked_path.find("~") { - Some(0) => return true, - _ => return false + fn begins_with_tilde(unchecked_path: &str) -> bool { + match unchecked_path.find('~') { + Some(0) => true, + _ => false } } match readline { Ok(line) => { - println!(""); + println!(); let has_tilde = begins_with_tilde(&line); if has_tilde { println!("Unfortunately, the tilde '~' cannot be used as a shortcut for your home directory.\n"); @@ -167,7 +167,7 @@ pub(crate) fn elect_like_kind_treatment(cutoff_date_arg: &mut Option) -> Some(mut cutoff_date_arg) => { let provided_date = NaiveDate::parse_from_str(&cutoff_date_arg, "%y-%m-%d") - .unwrap_or(NaiveDate::parse_from_str(&cutoff_date_arg, "%Y-%m-%d") + .unwrap_or_else(|_| NaiveDate::parse_from_str(&cutoff_date_arg, "%Y-%m-%d") .unwrap_or_else(|_| { println!("\nWARN: Date entered after -l command line arg (like-kind cutoff date) has an invalid format."); second_date_try_from_user(&mut cutoff_date_arg).unwrap() @@ -177,7 +177,7 @@ pub(crate) fn elect_like_kind_treatment(cutoff_date_arg: &mut Option) -> let (election, date_string) = _elect_like_kind_arg(&cutoff_date_arg, provided_date)?; - fn _elect_like_kind_arg(cutoff_date_arg: &String, provided_date: NaiveDate) -> Result<(bool, String), Box> { + fn _elect_like_kind_arg(cutoff_date_arg: &str, provided_date: NaiveDate) -> Result<(bool, String), Box> { let mut input = String::new(); let stdin = io::stdin(); @@ -267,7 +267,7 @@ pub(crate) fn elect_like_kind_treatment(cutoff_date_arg: &mut Option) -> fn test_naive_date_from_user_string(input: &mut String) -> Result> { let successfully_parsed_naive_date = NaiveDate::parse_from_str(&input, "%y-%m-%d") - .unwrap_or(NaiveDate::parse_from_str(&input, "%Y-%m-%d") + .unwrap_or_else(|_| NaiveDate::parse_from_str(&input, "%Y-%m-%d") .unwrap_or_else(|_| { second_date_try_from_user(input).unwrap() } )); Ok(successfully_parsed_naive_date) @@ -284,7 +284,7 @@ pub(crate) fn elect_like_kind_treatment(cutoff_date_arg: &mut Option) -> *input = input2; let successfully_parsed_naive_date = NaiveDate::parse_from_str(&input, "%y-%m-%d") - .unwrap_or(NaiveDate::parse_from_str(&input, "%Y-%m-%d") + .unwrap_or_else(|_| NaiveDate::parse_from_str(&input, "%Y-%m-%d") .unwrap_or_else(|_| { second_date_try_from_user(input).unwrap() } )); Ok(successfully_parsed_naive_date) diff --git a/src/crptls_lib/account.rs b/src/crptls_lib/account.rs index 2901c65..f9284d5 100644 --- a/src/crptls_lib/account.rs +++ b/src/crptls_lib/account.rs @@ -23,8 +23,8 @@ pub struct RawAccount { } impl RawAccount { - pub fn is_home_currency(&self, compare: &String) -> bool { - &self.ticker == compare + pub fn is_home_currency(&self, compare: &str) -> bool { + self.ticker == compare } pub fn margin_string(&self) -> String { diff --git a/src/crptls_lib/core_functions.rs b/src/crptls_lib/core_functions.rs index c7f8a67..3f74575 100644 --- a/src/crptls_lib/core_functions.rs +++ b/src/crptls_lib/core_functions.rs @@ -101,9 +101,9 @@ pub fn import_and_process_final( transactions_map = create_lots_mvmts::create_lots_and_movements( transactions_map, &action_records_map, - &mut raw_account_map, - &mut account_map, - &settings.home_currency, + &raw_account_map, + &account_map, + &settings.home_currency.as_str(), &settings.costing_method, settings.lk_treatment_enabled, settings.lk_cutoff_date, diff --git a/src/crptls_lib/create_lots_mvmts.rs b/src/crptls_lib/create_lots_mvmts.rs index d845ebd..2a1b568 100644 --- a/src/crptls_lib/create_lots_mvmts.rs +++ b/src/crptls_lib/create_lots_mvmts.rs @@ -19,7 +19,7 @@ pub(crate) fn create_lots_and_movements( ar_map: &HashMap, raw_acct_map: &HashMap, acct_map: &HashMap, - chosen_home_currency: &String, + chosen_home_currency: &str, chosen_costing_method: &InventoryCostingMethod, enable_lk_treatment: bool, like_kind_cutoff_date: NaiveDate, @@ -646,7 +646,7 @@ fn wrap_mvmt_and_push( this_mvmt: Movement, ar: &ActionRecord, lot: &Lot, - chosen_home_currency: &String, + chosen_home_currency: &str, raw_acct_map: &HashMap, acct_map: &HashMap, ) { @@ -654,7 +654,7 @@ fn wrap_mvmt_and_push( let acct = acct_map.get(&ar.account_key).unwrap(); let raw_acct = raw_acct_map.get(&acct.raw_key).unwrap(); - if ar.direction() == Polarity::Outgoing && !raw_acct.is_home_currency(&chosen_home_currency) { + if ar.direction() == Polarity::Outgoing && !raw_acct.is_home_currency(chosen_home_currency) { let ratio = this_mvmt.amount / ar.amount; this_mvmt.ratio_of_amt_to_outgoing_mvmts_in_a_r.set(round_d128_1e8(&ratio)); } @@ -675,7 +675,7 @@ fn fit_into_lots( list_of_lots_to_use: RefCell>>, vec_of_ordered_index_values: Vec, index_position: usize, - chosen_home_currency: &String, + chosen_home_currency: &str, ar_map: &HashMap, raw_acct_map: &HashMap, acct_map: &HashMap, @@ -812,7 +812,7 @@ fn process_multiple_incoming_lots_and_mvmts( txn_num: u32, outgoing_ar: &ActionRecord, incoming_ar: &ActionRecord, - chosen_home_currency: &String, + chosen_home_currency: &str, incoming_ar_key: u32, raw_acct_map: &HashMap, acct_map: &HashMap, diff --git a/src/crptls_lib/csv_import_accts_txns.rs b/src/crptls_lib/csv_import_accts_txns.rs index bf33c67..49dae13 100644 --- a/src/crptls_lib/csv_import_accts_txns.rs +++ b/src/crptls_lib/csv_import_accts_txns.rs @@ -86,10 +86,10 @@ The next column's value should be 2, then 3, etc, until the final account)."; }; let just_account: RawAccount = RawAccount { - account_num: account_num, - name: name, - ticker: ticker, - is_margin: is_margin, + account_num, + name, + ticker, + is_margin, }; raw_acct_map.insert(account_num, just_account); @@ -166,7 +166,7 @@ pub(crate) fn import_transactions( if amount != amount_rounded { changed_action_records += 1; changed_txn_num.push(this_tx_number); } let action_record = ActionRecord { - account_key: account_key, + account_key, amount: amount_rounded, tx_key: this_tx_number, self_ar_key: this_ar_number, @@ -185,35 +185,29 @@ pub(crate) fn import_transactions( } } - match incoming_ar { - Some(incoming_ar) => { - let x = incoming_ar_num.unwrap(); - action_records.insert(x, incoming_ar); - }, - None => {} + if let Some(incoming_ar) = incoming_ar { + let x = incoming_ar_num.unwrap(); + action_records.insert(x, incoming_ar); } - match outgoing_ar { - Some(outgoing_ar) => { - let y = outgoing_ar_num.unwrap(); - action_records.insert(y, outgoing_ar); - }, - None => {} + if let Some(outgoing_ar) = outgoing_ar { + let y = outgoing_ar_num.unwrap(); + action_records.insert(y, outgoing_ar); } let format_yy: String; let format_yyyy: String; if iso { - format_yyyy = "%Y".to_owned() + sep + &"%d" + sep + "%m"; - format_yy = "%y".to_owned() + sep + &"%d" + sep + "%m"; + format_yyyy = "%Y".to_owned() + sep + "%d" + sep + "%m"; + format_yy = "%y".to_owned() + sep + "%d" + sep + "%m"; } else { - format_yyyy = "%m".to_owned() + sep + &"%d" + sep + "%Y"; - format_yy = "%m".to_owned() + sep + &"%d" + sep + "%y"; + format_yyyy = "%m".to_owned() + sep + "%d" + sep + "%Y"; + format_yy = "%m".to_owned() + sep + "%d" + sep + "%y"; } let tx_date = NaiveDate::parse_from_str(this_tx_date, &format_yy) - .unwrap_or(NaiveDate::parse_from_str(this_tx_date, &format_yyyy) + .unwrap_or_else(|_| NaiveDate::parse_from_str(this_tx_date, &format_yyyy) .expect(" Failed to parse date in input file. Check date separator character (which is a hyphen unless modified via Cli option -d).\n") ); diff --git a/src/crptls_lib/transaction.rs b/src/crptls_lib/transaction.rs index 31d670b..92226e1 100644 --- a/src/crptls_lib/transaction.rs +++ b/src/crptls_lib/transaction.rs @@ -150,7 +150,7 @@ impl Transaction { pub fn get_outgoing_exchange_and_flow_mvmts( &self, - user_home_currency: &String, + user_home_currency: &str, ars: &HashMap, raw_acct_map: &HashMap, acct_map: &HashMap, @@ -194,7 +194,7 @@ impl Transaction { ars: &HashMap, raw_acct_map: &HashMap, acct_map: &HashMap, - home_currency: &String, + home_currency: &str, ) -> Result> { assert_eq!(self.action_record_idx_vec.len(), (2 as usize)); @@ -218,7 +218,7 @@ impl Transaction { ars: &HashMap, raw_accts: &HashMap, acct_map: &HashMap, - home_currency: &String, + home_currency: &str, ) -> Result> { let auto_memo = if self.action_record_idx_vec.len() == 2 { @@ -363,16 +363,13 @@ impl ActionRecord { for mvmt in lot.movements.borrow().iter() { - if (mvmt.date) <= txn.date { + if (mvmt.date) <= txn.date && mvmt.action_record_key == self.self_ar_key { - if mvmt.action_record_key == self.self_ar_key { + measure += mvmt.amount; - measure += mvmt.amount; + movements_in_ar.push(mvmt.clone()); - movements_in_ar.push(mvmt.clone()); - - if measure == target { return movements_in_ar } - } + if measure == target { return movements_in_ar } } } } diff --git a/src/export_csv.rs b/src/export_csv.rs index 23c7cb2..2473301 100644 --- a/src/export_csv.rs +++ b/src/export_csv.rs @@ -440,9 +440,9 @@ pub fn _5_transaction_mvmt_summaries_to_csv( if count == 0 { tx_type_string = mvmt.friendly_tx_type(&tx_type) }; count += 1; - if let None = ticker { ticker = Some(raw_acct.ticker.clone()) }; + if ticker.is_none() { ticker = Some(raw_acct.ticker.clone()) }; - if let None = polarity { + if polarity.is_none() { polarity = if mvmt.amount > d128!(0) { Some(Polarity::Incoming) } else { Some(Polarity::Outgoing) @@ -455,16 +455,13 @@ pub fn _5_transaction_mvmt_summaries_to_csv( amount_lt += mvmt.amount; proceeds_lt += mvmt.proceeds_lk.get(); cost_basis_lt += mvmt.cost_basis_lk.get(); - match term_lt { - None => { term_lt = Some(term)} - _ => {} - } + if term_lt.is_none() { term_lt = Some(term) } } else { assert_eq!(term, Term::ST); amount_st += mvmt.amount; proceeds_st += mvmt.proceeds_lk.get(); cost_basis_st += mvmt.cost_basis_lk.get(); - if term_st == None { + if term_st.is_none() { term_st = Some(term); } } diff --git a/src/export_je.rs b/src/export_je.rs index 8dae721..fa200df 100644 --- a/src/export_je.rs +++ b/src/export_je.rs @@ -122,7 +122,7 @@ depending on the bookkeeping practices you employ."; for mvmt in flow_or_outgoing_exchange_movements.iter() { - if let None = polarity { + if polarity.is_none() { polarity = if mvmt.amount > d128!(0) { Some(Polarity::Incoming) } else { Some(Polarity::Outgoing) @@ -135,16 +135,13 @@ depending on the bookkeeping practices you employ."; amount_lt += mvmt.amount; proceeds_lt += mvmt.proceeds_lk.get(); cost_basis_lt += mvmt.cost_basis_lk.get(); - match term_lt { - None => { term_lt = Some(term)} - _ => {} - } + if term_lt.is_none() { term_lt = Some(term) } } else { assert_eq!(term, Term::ST); amount_st += mvmt.amount; proceeds_st += mvmt.proceeds_lk.get(); cost_basis_st += mvmt.cost_basis_lk.get(); - if term_st == None { + if term_st.is_none() { term_st = Some(term); } } diff --git a/src/export_txt.rs b/src/export_txt.rs index 8483b61..d9d2ae8 100644 --- a/src/export_txt.rs +++ b/src/export_txt.rs @@ -410,17 +410,15 @@ Enable like-kind treatment: {}", let movements_sum = lot.get_sum_of_amts_in_lot(); - if acct.list_of_lots.borrow().len() > 0 { - if movements_sum > d128!(0) { + if acct.list_of_lots.borrow().len() > 0 && movements_sum > d128!(0) { - writeln!(file, " Lot {:>3} created {} w/ basis date {} • Σ: {:>12}, and cost basis of {:>10.2}", - (lot_idx+1), - lot.date_of_first_mvmt_in_lot, - lot.date_for_basis_purposes, - movements_sum, - formatted_basis.to_string().as_str().parse::()?, - )?; - } + writeln!(file, " Lot {:>3} created {} w/ basis date {} • Σ: {:>12}, and cost basis of {:>10.2}", + (lot_idx+1), + lot.date_of_first_mvmt_in_lot, + lot.date_for_basis_purposes, + movements_sum, + formatted_basis.to_string().as_str().parse::()?, + )?; } } } diff --git a/src/main.rs b/src/main.rs index ec2d9ef..e8e10ad 100644 --- a/src/main.rs +++ b/src/main.rs @@ -150,17 +150,15 @@ fn main() -> Result<(), Box> { )?; } - if print_journal_entries_only { + if print_journal_entries_only && !settings.lk_treatment_enabled { - if !settings.lk_treatment_enabled { - export_je::prepare_non_lk_journal_entries( - &settings, - &action_records_map, - &raw_acct_map, - &account_map, - &transactions_map, - )?; - } + export_je::prepare_non_lk_journal_entries( + &settings, + &action_records_map, + &raw_acct_map, + &account_map, + &transactions_map, + )?; } if present_print_menu_tui { diff --git a/src/mytui/print_menu_tui.rs b/src/mytui/print_menu_tui.rs index c0f4786..2016b42 100644 --- a/src/mytui/print_menu_tui.rs +++ b/src/mytui/print_menu_tui.rs @@ -48,9 +48,9 @@ pub (crate) fn print_menu_tui( ui::draw(&mut terminal, &app)?; - match events.next()? { + if let Event::Input(key) = events.next()? { - Event::Input(key) => match key { + match key { Key::Char(c) => { app.on_key(c); @@ -62,8 +62,7 @@ pub (crate) fn print_menu_tui( app.on_down(); } _ => {} - }, - _ => {} + } } if app.should_quit { diff --git a/src/setup.rs b/src/setup.rs index bd80bae..a3e4b6c 100644 --- a/src/setup.rs +++ b/src/setup.rs @@ -52,15 +52,11 @@ pub (crate) fn run_setup(args: super::Cli) -> Result<(PathBuf, ImportProcessPara output_dir_path, ) = wizard_or_not(args.flags.accept_args, wizard_or_not_args)?; - let like_kind_cutoff_date; - - if like_kind_election { - like_kind_cutoff_date = NaiveDate::parse_from_str(&like_kind_cutoff_date_string, "%y-%m-%d") - .unwrap_or(NaiveDate::parse_from_str(&like_kind_cutoff_date_string, "%Y-%m-%d") - .expect("Command line date (like-kind cutoff option) has an incorrect format. Program must abort.")); - } else { - like_kind_cutoff_date = NaiveDate::parse_from_str(&"1-1-1", "%y-%m-%d").unwrap(); - } + let like_kind_cutoff_date = if like_kind_election { + NaiveDate::parse_from_str(&like_kind_cutoff_date_string, "%y-%m-%d") + .unwrap_or_else(|_| NaiveDate::parse_from_str(&like_kind_cutoff_date_string, "%Y-%m-%d") + .expect("Command line date (like-kind cutoff option) has an incorrect format. Program must abort.")) + } else { NaiveDate::parse_from_str(&"1-1-1", "%y-%m-%d").unwrap() }; let settings = ImportProcessParameters { home_currency: args.opts.home_currency.into_string().unwrap().to_uppercase(), @@ -70,7 +66,7 @@ pub (crate) fn run_setup(args: super::Cli) -> Result<(PathBuf, ImportProcessPara lk_treatment_enabled: like_kind_election, lk_cutoff_date: like_kind_cutoff_date, lk_basis_date_preserved: true, // TODO - should_export: should_export, + should_export, export_path: output_dir_path, print_menu: args.flags.print_menu, journal_entry_export: args.flags.journal_entries_only,