Separated print menu TUI as feature that can be removed for building on Windows.
This commit is contained in:
parent
8e7a903669
commit
cabb6c5010
11
Cargo.toml
11
Cargo.toml
|
@ -5,6 +5,13 @@ authors = ["scoobybejesus <scoobybejesus@users.noreply.github.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Command-line utility for processing cryptocurrency transactions into 'lots' and 'movements'."
|
description = "Command-line utility for processing cryptocurrency transactions into 'lots' and 'movements'."
|
||||||
|
|
||||||
|
[features]
|
||||||
|
# The default optional package. Many people will want to use this feature,
|
||||||
|
# but it is optional because Windows doesn't support it.
|
||||||
|
default = ["print_menu"]
|
||||||
|
|
||||||
|
print_menu = ["tui", "termion"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "cryptools"
|
name = "cryptools"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
@ -18,8 +25,8 @@ decimal = "2.0.4"
|
||||||
chrono = { version = "0.4", features = ["serde"] }
|
chrono = { version = "0.4", features = ["serde"] }
|
||||||
structopt = "0.2.10"
|
structopt = "0.2.10"
|
||||||
rustyline = "5.0.0"
|
rustyline = "5.0.0"
|
||||||
tui = "0.5"
|
tui = { version = "0.5", optional = true }
|
||||||
termion = "1.5"
|
termion = { version = "1.5", optional = true }
|
||||||
dotenv = "0.14.1"
|
dotenv = "0.14.1"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
|
|
10
README.md
10
README.md
|
@ -82,10 +82,15 @@ You'll choose Delimited, and Comma, and then highlight every column and choose T
|
||||||
|
|
||||||
This will build `./target/debug/cryptools` (or `./target/release/cryptools` for a non-debug build).
|
This will build `./target/debug/cryptools` (or `./target/release/cryptools` for a non-debug build).
|
||||||
|
|
||||||
|
### Note on Windows
|
||||||
|
|
||||||
|
Windows won't build with the current TUI print menu. To build on Windows, try with `cargo build --no-default-features`.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Run `./target/debug/cryptools` with no arguments (or with `--help`, or `-h`) to see usage.
|
Run `./target/debug/cryptools` with no arguments (or with `--help`, or `-h`) to see usage.
|
||||||
Alternatively, run `cargo run`, in which case command-line options for `cryptools` may be entered following `--`, e.g., `cargo run -- -h`.
|
Alternatively, run `cargo run`, in which case command-line parameters for `cryptools` may be entered following `--`,
|
||||||
|
e.g., `cargo run -- -h` or `cargo run -- my_input_file.csv -ai`.
|
||||||
|
|
||||||
Running with no options/arguments will lead the user through a wizard.
|
Running with no options/arguments will lead the user through a wizard.
|
||||||
To skip the wizard, there are three requirements:
|
To skip the wizard, there are three requirements:
|
||||||
|
@ -105,7 +110,8 @@ or jump directly to the [examples.md](https://github.com/scoobybejesus/cryptools
|
||||||
See [.env.example](https://github.com/scoobybejesus/cryptools/blob/master/examples/.env.example) for those defaults.
|
See [.env.example](https://github.com/scoobybejesus/cryptools/blob/master/examples/.env.example) for those defaults.
|
||||||
If you wish to skip the wizard but require changes to default settings, copy `.env.example` to `.env` and make your changes.
|
If you wish to skip the wizard but require changes to default settings, copy `.env.example` to `.env` and make your changes.
|
||||||
The `.env` file must be placed in the directory from which `cryptools` is run or a parent directory.
|
The `.env` file must be placed in the directory from which `cryptools` is run or a parent directory.
|
||||||
Alternatively, the respective environment variables may be set manually.
|
Alternatively, the respective environment variables may be set manually,
|
||||||
|
or it may be easier to choose the proper command line flag (such as `-d` for `date_separator_is_slash` or `-i` for `iso_date`.).
|
||||||
|
|
||||||
#### Pro Tip
|
#### Pro Tip
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ pub struct ImportProcessParameters {
|
||||||
pub lk_basis_date_preserved: bool,
|
pub lk_basis_date_preserved: bool,
|
||||||
pub should_export: bool,
|
pub should_export: bool,
|
||||||
pub export_path: PathBuf,
|
pub export_path: PathBuf,
|
||||||
pub print_menu: bool,
|
|
||||||
pub journal_entry_export: bool,
|
pub journal_entry_export: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
16
src/main.rs
16
src/main.rs
|
@ -17,9 +17,11 @@ mod setup;
|
||||||
mod cli_user_choices;
|
mod cli_user_choices;
|
||||||
mod wizard;
|
mod wizard;
|
||||||
mod skip_wizard;
|
mod skip_wizard;
|
||||||
mod mytui;
|
|
||||||
mod export;
|
mod export;
|
||||||
|
|
||||||
|
#[cfg(feature = "print_menu")]
|
||||||
|
mod mytui;
|
||||||
|
|
||||||
use export::{export_all, export_je};
|
use export::{export_all, export_je};
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,6 +45,7 @@ pub struct Cli {
|
||||||
/// Once the file_to_import has been fully processed, the user will be presented
|
/// Once the file_to_import has been fully processed, the user will be presented
|
||||||
/// with a menu for manually selecting which reports to print/export. If this flag is not
|
/// with a menu for manually selecting which reports to print/export. If this flag is not
|
||||||
/// set, the program will print/export all available reports.
|
/// set, the program will print/export all available reports.
|
||||||
|
#[cfg(feature = "print_menu")]
|
||||||
#[structopt(name = "print menu", short, long = "print-menu")]
|
#[structopt(name = "print menu", short, long = "print-menu")]
|
||||||
print_menu: bool,
|
print_menu: bool,
|
||||||
|
|
||||||
|
@ -124,7 +127,7 @@ change default program behavior.
|
||||||
|
|
||||||
let cfg = setup::get_env(&args)?;
|
let cfg = setup::get_env(&args)?;
|
||||||
|
|
||||||
let (input_file_path, settings) = setup::run_setup(args, cfg)?;
|
let (input_file_path, settings) = setup::run_setup(&args, cfg)?;
|
||||||
|
|
||||||
let (
|
let (
|
||||||
raw_acct_map,
|
raw_acct_map,
|
||||||
|
@ -134,10 +137,14 @@ change default program behavior.
|
||||||
) = crptls::core_functions::import_and_process_final(input_file_path, &settings)?;
|
) = crptls::core_functions::import_and_process_final(input_file_path, &settings)?;
|
||||||
|
|
||||||
let mut should_export_all = settings.should_export;
|
let mut should_export_all = settings.should_export;
|
||||||
let present_print_menu_tui = settings.print_menu;
|
|
||||||
let print_journal_entries_only = settings.journal_entry_export;
|
|
||||||
|
|
||||||
|
#[cfg(feature = "print_menu")]
|
||||||
|
let present_print_menu_tui: bool = args.print_menu.to_owned();
|
||||||
|
|
||||||
|
#[cfg(feature = "print_menu")]
|
||||||
if present_print_menu_tui { should_export_all = false }
|
if present_print_menu_tui { should_export_all = false }
|
||||||
|
|
||||||
|
let print_journal_entries_only = settings.journal_entry_export;
|
||||||
if print_journal_entries_only { should_export_all = false }
|
if print_journal_entries_only { should_export_all = false }
|
||||||
|
|
||||||
if should_export_all {
|
if should_export_all {
|
||||||
|
@ -162,6 +169,7 @@ change default program behavior.
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "print_menu")]
|
||||||
if present_print_menu_tui {
|
if present_print_menu_tui {
|
||||||
|
|
||||||
mytui::print_menu_tui::print_menu_tui(
|
mytui::print_menu_tui::print_menu_tui(
|
||||||
|
|
|
@ -110,14 +110,14 @@ pub struct ArgsForImportVarsTBD {
|
||||||
pub suppress_reports: bool,
|
pub suppress_reports: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub (crate) fn run_setup(cmd_args: super::Cli, cfg: super::Cfg) -> Result<(PathBuf, ImportProcessParameters), Box<dyn Error>> {
|
pub (crate) fn run_setup(cmd_args: &super::Cli, cfg: super::Cfg) -> Result<(PathBuf, ImportProcessParameters), Box<dyn Error>> {
|
||||||
|
|
||||||
let date_separator = match cfg.date_separator_is_slash {
|
let date_separator = match cfg.date_separator_is_slash {
|
||||||
false => { "-" } // Default
|
false => { "-" } // Default
|
||||||
true => { "/" } // Overridden by env var or cmd line flag
|
true => { "/" } // Overridden by env var or cmd line flag
|
||||||
};
|
};
|
||||||
|
|
||||||
let input_file_path = match cmd_args.file_to_import {
|
let input_file_path = match cmd_args.file_to_import.to_owned() {
|
||||||
Some(file) => {
|
Some(file) => {
|
||||||
if File::open(&file).is_ok() {
|
if File::open(&file).is_ok() {
|
||||||
file
|
file
|
||||||
|
@ -137,7 +137,7 @@ pub (crate) fn run_setup(cmd_args: super::Cli, cfg: super::Cfg) -> Result<(PathB
|
||||||
let wizard_or_not_args = ArgsForImportVarsTBD {
|
let wizard_or_not_args = ArgsForImportVarsTBD {
|
||||||
inv_costing_method_arg: cfg.inv_costing_method,
|
inv_costing_method_arg: cfg.inv_costing_method,
|
||||||
lk_cutoff_date_arg: cfg.lk_cutoff_date,
|
lk_cutoff_date_arg: cfg.lk_cutoff_date,
|
||||||
output_dir_path: cmd_args.output_dir_path,
|
output_dir_path: cmd_args.output_dir_path.to_owned(),
|
||||||
suppress_reports: cmd_args.suppress_reports,
|
suppress_reports: cmd_args.suppress_reports,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -165,7 +165,6 @@ pub (crate) fn run_setup(cmd_args: super::Cli, cfg: super::Cfg) -> Result<(PathB
|
||||||
lk_basis_date_preserved: true, // TODO
|
lk_basis_date_preserved: true, // TODO
|
||||||
should_export,
|
should_export,
|
||||||
export_path: output_dir_path,
|
export_path: output_dir_path,
|
||||||
print_menu: cmd_args.print_menu,
|
|
||||||
journal_entry_export: cmd_args.journal_entries_only,
|
journal_entry_export: cmd_args.journal_entries_only,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue