From ec6fdf88419a7fdad0128f04bb7a0478776974ab Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 25 Feb 2026 10:58:51 +0800 Subject: Add hexdump and sheetdump commands --- src/cmds/cmd/sheetdump.rs | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/cmds/cmd/sheetdump.rs (limited to 'src/cmds/cmd/sheetdump.rs') diff --git a/src/cmds/cmd/sheetdump.rs b/src/cmds/cmd/sheetdump.rs new file mode 100644 index 0000000..3b0953a --- /dev/null +++ b/src/cmds/cmd/sheetdump.rs @@ -0,0 +1,62 @@ +use crate::{ + cmd_output, + cmds::{ + arg::sheetdump::JVSheetdumpArgument, collect::sheetdump::JVSheetdumpCollect, + r#in::sheetdump::JVSheetdumpInput, out::mappings::JVMappingsOutput, + }, + systems::cmd::{ + cmd_system::JVCommandContext, + errors::{CmdExecuteError, CmdPrepareError}, + }, +}; +use cmd_system_macros::exec; +use just_enough_vcs::system::sheet_system::{ + mapping::LocalMapping, + sheet::{SheetData, error::ReadSheetDataError}, +}; + +pub struct JVSheetdumpCommand; +type Cmd = JVSheetdumpCommand; +type Arg = JVSheetdumpArgument; +type In = JVSheetdumpInput; +type Collect = JVSheetdumpCollect; + +fn help_str() -> String { + todo!() +} + +async fn prepare(args: &Arg, _ctx: &JVCommandContext) -> Result { + Ok(In { sort: args.sort }) +} + +async fn collect(args: &Arg, _ctx: &JVCommandContext) -> Result { + let mut sheet = SheetData::empty(); + + sheet + .full_read(&args.sheet_file) + .await + .map_err(|e| match e { + ReadSheetDataError::IOErr(error) => CmdPrepareError::Io(error), + })?; + + Ok(Collect { sheet: sheet }) +} + +#[exec] +async fn exec( + input: In, + collect: Collect, +) -> Result<(Box, String), CmdExecuteError> { + let mappings = collect.sheet.mappings(); + let mut mappings_vec = mappings.iter().cloned().collect::>(); + if input.sort { + mappings_vec.sort(); + } + + let result = JVMappingsOutput { + mappings: mappings_vec, + }; + cmd_output!(result, JVMappingsOutput) +} + +crate::command_template!(); -- cgit