summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-03-26 16:24:04 +0800
committer魏曹先生 <1992414357@qq.com>2026-03-26 16:24:04 +0800
commitc0e321067a1a19754041ac7996267adfea881037 (patch)
treebb9f8de7e3129ed5de2b465c5570f38599b0e1e2 /src
parentba08a376182c839479e6e81cc60c5a0d24865f7f (diff)
Add workspace here command and alias documentation
Diffstat (limited to 'src')
-rw-r--r--src/cmds/cmd/workspace_here.rs50
-rw-r--r--src/cmds/converter/space_error.rs22
2 files changed, 72 insertions, 0 deletions
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<In, CmdPrepareError> {
+ Ok(JVEmptyInput)
+}
+
+async fn collect(_args: &Arg, _ctx: &JVCommandContext) -> Result<Collect, CmdPrepareError> {
+ Ok(JVWorkspaceCollect {
+ manager: WorkspaceManager::new(),
+ })
+}
+
+#[exec]
+async fn exec(_input: In, collect: Collect) -> Result<AnyOutput, CmdExecuteError> {
+ 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),
+ }
+ }
+}