From c0e321067a1a19754041ac7996267adfea881037 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Thu, 26 Mar 2026 16:24:04 +0800 Subject: Add workspace here command and alias documentation --- src/cmds/cmd/workspace_here.rs | 50 +++++++++++++++++++++++++++++++++++++++ src/cmds/converter/space_error.rs | 22 +++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/cmds/cmd/workspace_here.rs create mode 100644 src/cmds/converter/space_error.rs (limited to 'src') diff --git a/src/cmds/cmd/workspace_here.rs b/src/cmds/cmd/workspace_here.rs new file mode 100644 index 0000000..dde5bab --- /dev/null +++ b/src/cmds/cmd/workspace_here.rs @@ -0,0 +1,50 @@ +use crate::{ + cmd_output, + cmds::{ + arg::empty::JVEmptyArgument, collect::workspace::JVWorkspaceCollect, + converter::space_error::JVSpaceErrorConverter, r#in::empty::JVEmptyInput, + out::path::JVPathOutput, + }, + systems::{ + cmd::{ + cmd_system::{AnyOutput, JVCommandContext}, + errors::{CmdExecuteError, CmdPrepareError}, + }, + helpdoc::helpdoc_viewer, + }, +}; +use cmd_system_macros::exec; +use just_enough_vcs::system::workspace::workspace::manager::WorkspaceManager; + +pub struct JVWorkspaceHereCommand; +type Cmd = JVWorkspaceHereCommand; +type Arg = JVEmptyArgument; +type In = JVEmptyInput; +type Collect = JVWorkspaceCollect; + +async fn help_str() -> String { + helpdoc_viewer::display("commands/workspace_here").await; + String::new() +} + +async fn prepare(_args: &Arg, _ctx: &JVCommandContext) -> Result { + Ok(JVEmptyInput) +} + +async fn collect(_args: &Arg, _ctx: &JVCommandContext) -> Result { + Ok(JVWorkspaceCollect { + manager: WorkspaceManager::new(), + }) +} + +#[exec] +async fn exec(_input: In, collect: Collect) -> Result { + let path = collect + .manager + .get_space() + .space_dir_current() + .map_err(JVSpaceErrorConverter::to_exec_error)?; + cmd_output!(JVPathOutput => JVPathOutput { path }) +} + +crate::command_template!(); diff --git a/src/cmds/converter/space_error.rs b/src/cmds/converter/space_error.rs new file mode 100644 index 0000000..4ff7e7e --- /dev/null +++ b/src/cmds/converter/space_error.rs @@ -0,0 +1,22 @@ +use crate::systems::cmd::errors::CmdExecuteError; +use just_enough_vcs::system::space::error::SpaceError; +use rust_i18n::t; + +pub struct JVSpaceErrorConverter; + +impl JVSpaceErrorConverter { + pub fn to_exec_error(err: SpaceError) -> CmdExecuteError { + match err { + SpaceError::SpaceNotFound => { + CmdExecuteError::Error(t!("space_error.space_not_found").trim().to_string()) + } + SpaceError::PathFormatError(path_format_error) => CmdExecuteError::Error( + t!("space_error.path_fmt_error", error = path_format_error) + .trim() + .to_string(), + ), + SpaceError::Io(error) => CmdExecuteError::Io(error), + SpaceError::Other(msg) => CmdExecuteError::Error(msg), + } + } +} -- cgit