summaryrefslogtreecommitdiff
path: root/src/cmds/renderer
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-02-27 06:20:10 +0800
committer魏曹先生 <1992414357@qq.com>2026-02-27 06:20:10 +0800
commita31cb962b99e96bda167be87dd37c2e2f82fea2f (patch)
treec8182c97081492bc01cf7bfcacc4cd7a8fda45a3 /src/cmds/renderer
parent94b7d7d80a0c2dd0884bed60659d65c5019f0839 (diff)
Add pretty output option to sheetdump command
Diffstat (limited to 'src/cmds/renderer')
-rw-r--r--src/cmds/renderer/mappings_pretty.rs93
1 files changed, 93 insertions, 0 deletions
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()
+}