diff options
| -rw-r--r-- | src/cmds/arg/sheetdump.rs | 7 | ||||
| -rw-r--r-- | src/cmds/cmd/sheetdump.rs | 24 | ||||
| -rw-r--r-- | src/cmds/in/sheetdump.rs | 1 | ||||
| -rw-r--r-- | src/cmds/out/mappings_pretty.rs | 7 | ||||
| -rw-r--r-- | src/cmds/renderer/mappings_pretty.rs | 93 |
5 files changed, 123 insertions, 9 deletions
diff --git a/src/cmds/arg/sheetdump.rs b/src/cmds/arg/sheetdump.rs index 907b181..abd0d29 100644 --- a/src/cmds/arg/sheetdump.rs +++ b/src/cmds/arg/sheetdump.rs @@ -6,6 +6,9 @@ use clap::Parser; pub struct JVSheetdumpArgument { pub sheet_file: PathBuf, - #[arg(short, long)] - pub sort: bool, + #[arg(short, long = "no-sort")] + pub no_sort: bool, + + #[arg(long = "no-pretty")] + pub no_pretty: bool, } diff --git a/src/cmds/cmd/sheetdump.rs b/src/cmds/cmd/sheetdump.rs index 1945f44..fefa6d4 100644 --- a/src/cmds/cmd/sheetdump.rs +++ b/src/cmds/cmd/sheetdump.rs @@ -3,8 +3,10 @@ use std::any::TypeId; use crate::{ cmd_output, cmds::{ - arg::sheetdump::JVSheetdumpArgument, collect::sheetdump::JVSheetdumpCollect, - r#in::sheetdump::JVSheetdumpInput, out::mappings::JVMappingsOutput, + arg::sheetdump::JVSheetdumpArgument, + collect::sheetdump::JVSheetdumpCollect, + r#in::sheetdump::JVSheetdumpInput, + out::{mappings::JVMappingsOutput, mappings_pretty::JVMappingsPrettyOutput}, }, systems::cmd::{ cmd_system::JVCommandContext, @@ -28,7 +30,10 @@ fn help_str() -> String { } async fn prepare(args: &Arg, _ctx: &JVCommandContext) -> Result<In, CmdPrepareError> { - Ok(In { sort: args.sort }) + Ok(In { + sort: !args.no_sort, + pretty: !args.no_pretty, + }) } async fn collect(args: &Arg, _ctx: &JVCommandContext) -> Result<Collect, CmdPrepareError> { @@ -55,10 +60,15 @@ async fn exec( mappings_vec.sort(); } - let result = JVMappingsOutput { - mappings: mappings_vec, - }; - cmd_output!(JVMappingsOutput => result) + if input.pretty { + cmd_output!(JVMappingsPrettyOutput => JVMappingsPrettyOutput { + mappings: mappings_vec, + }) + } else { + cmd_output!(JVMappingsOutput => JVMappingsOutput { + mappings: mappings_vec, + }) + } } crate::command_template!(); diff --git a/src/cmds/in/sheetdump.rs b/src/cmds/in/sheetdump.rs index 7c636e5..5bfcd80 100644 --- a/src/cmds/in/sheetdump.rs +++ b/src/cmds/in/sheetdump.rs @@ -1,3 +1,4 @@ pub struct JVSheetdumpInput { pub sort: bool, + pub pretty: bool, } diff --git a/src/cmds/out/mappings_pretty.rs b/src/cmds/out/mappings_pretty.rs new file mode 100644 index 0000000..e0fa58c --- /dev/null +++ b/src/cmds/out/mappings_pretty.rs @@ -0,0 +1,7 @@ +use just_enough_vcs::system::sheet_system::mapping::LocalMapping; +use serde::Serialize; + +#[derive(Serialize)] +pub struct JVMappingsPrettyOutput { + pub mappings: Vec<LocalMapping>, +} diff --git a/src/cmds/renderer/mappings_pretty.rs b/src/cmds/renderer/mappings_pretty.rs new file mode 100644 index 0000000..dad4d95 --- /dev/null +++ b/src/cmds/renderer/mappings_pretty.rs @@ -0,0 +1,93 @@ +use cli_utils::{display::SimpleTable, string_vec}; +use colored::Colorize; +use just_enough_vcs::system::sheet_system::mapping::LocalMapping; +use render_system_macros::result_renderer; +use rust_i18n::t; + +use crate::{ + cmds::out::mappings_pretty::JVMappingsPrettyOutput, + r_println, + systems::{cmd::errors::CmdRenderError, render::renderer::JVRenderResult}, +}; + +#[result_renderer(JVMappingsPrettyRenderer)] +pub async fn render(data: &JVMappingsPrettyOutput) -> Result<JVRenderResult, CmdRenderError> { + let mut r = JVRenderResult::default(); + let mappings = &data.mappings; + r_println!(r, "{}", render_pretty_mappings(&mappings)); + Ok(r) +} + +fn render_pretty_mappings(mappings: &Vec<LocalMapping>) -> String { + let header = string_vec![ + "0", + format!(" | {}", t!("sheetedit.mapping").bold()), + "", + format!("| {}", t!("sheetedit.index_source").bold()), + "", + format!("| {}", t!("sheetedit.forward").bold()), + "|" + ]; + + let mut simple_table = SimpleTable::new(header); + + let mut i = 1; + for mapping in mappings { + let mapping_str = mapping + .to_string() + .split(" ") + .into_iter() + .map(|s| s.to_string()) + .collect::<Vec<String>>(); + simple_table.push_item(vec![ + // Number + format!("{}", i).bold().to_string(), + // Mapping + format!( + " | {} ", + mapping_str + .get(0) + .unwrap_or(&String::default()) + .bright_cyan() + ), + // => & == + format!( + "{} ", + match mapping_str.get(1).unwrap_or(&String::default()).as_str() { + "==" => mapping_str[1].bright_yellow().bold(), + "=>" => mapping_str[1].bright_yellow(), + _ => mapping_str[1].bright_black(), + } + ), + // Index + format!( + " {} ", + mapping_str + .get(2) + .unwrap_or(&String::default()) + .bright_yellow() + ), + // => & == + format!( + "{} ", + match mapping_str.get(1).unwrap_or(&String::default()).as_str() { + "==" => mapping_str[1].bright_yellow().bold(), + "=>" => mapping_str[1].bright_yellow(), + _ => mapping_str[1].bright_black(), + } + ), + // Forward + format!( + " {} ", + mapping_str + .get(4) + .unwrap_or(&String::default()) + .bright_yellow() + ), + "|".to_string(), + ]); + + i += 1; + } + simple_table.to_string() +} |
