From 707a1f7c747a08e2ce77df88edc1e72eae9cbebc Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 14 Mar 2026 18:32:47 +0800 Subject: Add workspace commands and supporting types --- src/cmds/cmd/workspace_create.rs | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/cmds/cmd/workspace_create.rs (limited to 'src/cmds/cmd/workspace_create.rs') diff --git a/src/cmds/cmd/workspace_create.rs b/src/cmds/cmd/workspace_create.rs new file mode 100644 index 0000000..c5f8c8e --- /dev/null +++ b/src/cmds/cmd/workspace_create.rs @@ -0,0 +1,53 @@ +use crate::{ + cmd_output, + cmds::{ + arg::path::JVPathArgument, collect::empty::JVEmptyCollect, + converter::workspace_operation_error::JVWorkspaceOperationErrorConverter, + r#in::workspace_create::JVWorkspaceCreateInput, out::none::JVNoneOutput, + }, + systems::{ + cmd::{ + cmd_system::JVCommandContext, + errors::{CmdExecuteError, CmdPrepareError}, + }, + helpdoc::helpdoc_viewer, + }, +}; +use cmd_system_macros::exec; +use just_enough_vcs::system::workspace::func::create_workspace; +use std::any::TypeId; + +pub struct JVWorkspaceCreateCommand; +type Cmd = JVWorkspaceCreateCommand; +type Arg = JVPathArgument; +type In = JVWorkspaceCreateInput; +type Collect = JVEmptyCollect; + +async fn help_str() -> String { + helpdoc_viewer::display("commands/workspace/create").await; + String::new() +} + +async fn prepare(args: &Arg, _ctx: &JVCommandContext) -> Result { + Ok(JVWorkspaceCreateInput { + path: args.path.clone(), + }) +} + +async fn collect(_args: &Arg, _ctx: &JVCommandContext) -> Result { + Ok(JVEmptyCollect) +} + +#[exec] +async fn exec( + input: In, + _collect: Collect, +) -> Result<(Box, TypeId), CmdExecuteError> { + create_workspace(input.path) + .await + .map_err(JVWorkspaceOperationErrorConverter::to_exec_error)?; + + cmd_output!(JVNoneOutput => JVNoneOutput) +} + +crate::command_template!(); -- cgit