diff options
| -rw-r--r-- | src/cmds/arg/sheetdump.rs | 11 | ||||
| -rw-r--r-- | src/cmds/arg/single_file.rs | 8 | ||||
| -rw-r--r-- | src/cmds/cmd/hexdump.rs | 44 | ||||
| -rw-r--r-- | src/cmds/cmd/sheetdump.rs | 62 | ||||
| -rw-r--r-- | src/cmds/cmd/status.rs | 6 | ||||
| -rw-r--r-- | src/cmds/collect/empty.rs | 1 | ||||
| -rw-r--r-- | src/cmds/collect/sheetdump.rs | 5 | ||||
| -rw-r--r-- | src/cmds/collect/single_file.rs | 3 | ||||
| -rw-r--r-- | src/cmds/in/empty.rs | 1 | ||||
| -rw-r--r-- | src/cmds/in/sheetdump.rs | 3 | ||||
| -rw-r--r-- | src/cmds/in/status.rs | 1 | ||||
| -rw-r--r-- | src/cmds/out/hex.rs | 6 | ||||
| -rw-r--r-- | src/cmds/out/mappings.rs | 7 | ||||
| -rw-r--r-- | src/cmds/renderer/hex.rs | 15 | ||||
| -rw-r--r-- | src/cmds/renderer/mappings.rs | 17 |
15 files changed, 186 insertions, 4 deletions
diff --git a/src/cmds/arg/sheetdump.rs b/src/cmds/arg/sheetdump.rs new file mode 100644 index 0000000..907b181 --- /dev/null +++ b/src/cmds/arg/sheetdump.rs @@ -0,0 +1,11 @@ +use std::path::PathBuf; + +use clap::Parser; + +#[derive(Parser, Debug)] +pub struct JVSheetdumpArgument { + pub sheet_file: PathBuf, + + #[arg(short, long)] + pub sort: bool, +} diff --git a/src/cmds/arg/single_file.rs b/src/cmds/arg/single_file.rs new file mode 100644 index 0000000..4ed9715 --- /dev/null +++ b/src/cmds/arg/single_file.rs @@ -0,0 +1,8 @@ +use std::path::PathBuf; + +use clap::Parser; + +#[derive(Parser, Debug)] +pub struct JVSingleFileArgument { + pub file: PathBuf, +} diff --git a/src/cmds/cmd/hexdump.rs b/src/cmds/cmd/hexdump.rs new file mode 100644 index 0000000..a0f4a21 --- /dev/null +++ b/src/cmds/cmd/hexdump.rs @@ -0,0 +1,44 @@ +use crate::{ + cmd_output, + cmds::{ + arg::single_file::JVSingleFileArgument, collect::single_file::JVSingleFileCollect, + r#in::empty::JVEmptyInput, out::hex::JVHexOutput, + }, + systems::cmd::{ + cmd_system::JVCommandContext, + errors::{CmdExecuteError, CmdPrepareError}, + }, +}; +use cmd_system_macros::exec; +use tokio::fs; + +pub struct JVHexdumpCommand; +type Cmd = JVHexdumpCommand; +type Arg = JVSingleFileArgument; +type In = JVEmptyInput; +type Collect = JVSingleFileCollect; + +fn help_str() -> String { + "Hello".to_string() +} + +async fn prepare(_args: &Arg, _ctx: &JVCommandContext) -> Result<In, CmdPrepareError> { + Ok(In {}) +} + +async fn collect(args: &Arg, _ctx: &JVCommandContext) -> Result<Collect, CmdPrepareError> { + let file = &args.file; + let data = fs::read(file).await?; + Ok(Collect { data }) +} + +#[exec] +async fn exec( + _input: In, + collect: Collect, +) -> Result<(Box<dyn std::any::Any + Send + 'static>, String), CmdExecuteError> { + let output = JVHexOutput { data: collect.data }; + cmd_output!(output, JVHexOutput) +} + +crate::command_template!(); 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<In, CmdPrepareError> { + Ok(In { sort: args.sort }) +} + +async fn collect(args: &Arg, _ctx: &JVCommandContext) -> Result<Collect, CmdPrepareError> { + 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<dyn std::any::Any + Send + 'static>, String), CmdExecuteError> { + let mappings = collect.sheet.mappings(); + let mut mappings_vec = mappings.iter().cloned().collect::<Vec<LocalMapping>>(); + if input.sort { + mappings_vec.sort(); + } + + let result = JVMappingsOutput { + mappings: mappings_vec, + }; + cmd_output!(result, JVMappingsOutput) +} + +crate::command_template!(); diff --git a/src/cmds/cmd/status.rs b/src/cmds/cmd/status.rs index 4e89d42..c1f2a96 100644 --- a/src/cmds/cmd/status.rs +++ b/src/cmds/cmd/status.rs @@ -5,7 +5,7 @@ use crate::{ cmds::{ arg::status::JVStatusArgument, collect::status::JVStatusCollect, - r#in::status::JVStatusInput, + r#in::empty::JVEmptyInput, out::status::{JVStatusOutput, JVStatusWrongModifyReason}, }, systems::cmd::{ @@ -22,7 +22,7 @@ use just_enough_vcs::lib::{ pub struct JVStatusCommand; type Cmd = JVStatusCommand; type Arg = JVStatusArgument; -type In = JVStatusInput; +type In = JVEmptyInput; type Collect = JVStatusCollect; fn help_str() -> String { @@ -30,7 +30,7 @@ fn help_str() -> String { } async fn prepare(_args: &Arg, _ctx: &JVCommandContext) -> Result<In, CmdPrepareError> { - Ok(JVStatusInput) + Ok(In {}) } async fn collect(_args: &Arg, _ctx: &JVCommandContext) -> Result<Collect, CmdPrepareError> { diff --git a/src/cmds/collect/empty.rs b/src/cmds/collect/empty.rs new file mode 100644 index 0000000..b28c81d --- /dev/null +++ b/src/cmds/collect/empty.rs @@ -0,0 +1 @@ +pub struct JVEmptyCollect; diff --git a/src/cmds/collect/sheetdump.rs b/src/cmds/collect/sheetdump.rs new file mode 100644 index 0000000..c00800d --- /dev/null +++ b/src/cmds/collect/sheetdump.rs @@ -0,0 +1,5 @@ +use just_enough_vcs::system::sheet_system::sheet::SheetData; + +pub struct JVSheetdumpCollect { + pub sheet: SheetData, +} diff --git a/src/cmds/collect/single_file.rs b/src/cmds/collect/single_file.rs new file mode 100644 index 0000000..92c2829 --- /dev/null +++ b/src/cmds/collect/single_file.rs @@ -0,0 +1,3 @@ +pub struct JVSingleFileCollect { + pub data: Vec<u8>, +} diff --git a/src/cmds/in/empty.rs b/src/cmds/in/empty.rs new file mode 100644 index 0000000..263ec70 --- /dev/null +++ b/src/cmds/in/empty.rs @@ -0,0 +1 @@ +pub struct JVEmptyInput; diff --git a/src/cmds/in/sheetdump.rs b/src/cmds/in/sheetdump.rs new file mode 100644 index 0000000..7c636e5 --- /dev/null +++ b/src/cmds/in/sheetdump.rs @@ -0,0 +1,3 @@ +pub struct JVSheetdumpInput { + pub sort: bool, +} diff --git a/src/cmds/in/status.rs b/src/cmds/in/status.rs deleted file mode 100644 index 859ccd2..0000000 --- a/src/cmds/in/status.rs +++ /dev/null @@ -1 +0,0 @@ -pub struct JVStatusInput; diff --git a/src/cmds/out/hex.rs b/src/cmds/out/hex.rs new file mode 100644 index 0000000..69e2b37 --- /dev/null +++ b/src/cmds/out/hex.rs @@ -0,0 +1,6 @@ +use serde::Serialize; + +#[derive(Serialize)] +pub struct JVHexOutput { + pub data: Vec<u8>, +} diff --git a/src/cmds/out/mappings.rs b/src/cmds/out/mappings.rs new file mode 100644 index 0000000..69c8cd0 --- /dev/null +++ b/src/cmds/out/mappings.rs @@ -0,0 +1,7 @@ +use just_enough_vcs::system::sheet_system::mapping::LocalMapping; +use serde::Serialize; + +#[derive(Serialize)] +pub struct JVMappingsOutput { + pub mappings: Vec<LocalMapping>, +} diff --git a/src/cmds/renderer/hex.rs b/src/cmds/renderer/hex.rs new file mode 100644 index 0000000..b9a593a --- /dev/null +++ b/src/cmds/renderer/hex.rs @@ -0,0 +1,15 @@ +use just_enough_vcs::utils::hex_display::hex_display_vec; +use render_system_macros::result_renderer; + +use crate::{ + cmds::out::hex::JVHexOutput, + r_println, + systems::{cmd::errors::CmdRenderError, render::renderer::JVRenderResult}, +}; + +#[result_renderer(JVHexRenderer)] +pub async fn render(data: &JVHexOutput) -> Result<JVRenderResult, CmdRenderError> { + let mut r = JVRenderResult::default(); + r_println!(r, "{}", hex_display_vec(data.data.clone())); + Ok(r) +} diff --git a/src/cmds/renderer/mappings.rs b/src/cmds/renderer/mappings.rs new file mode 100644 index 0000000..5de96c0 --- /dev/null +++ b/src/cmds/renderer/mappings.rs @@ -0,0 +1,17 @@ +use render_system_macros::result_renderer; + +use crate::{ + cmds::out::mappings::JVMappingsOutput, + r_println, + systems::{cmd::errors::CmdRenderError, render::renderer::JVRenderResult}, +}; + +#[result_renderer(JVMappingsRenderer)] +pub async fn render(data: &JVMappingsOutput) -> Result<JVRenderResult, CmdRenderError> { + let mut r = JVRenderResult::default(); + let mappings = &data.mappings; + for m in mappings { + r_println!(r, "{}", m) + } + Ok(r) +} |
