DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceHandlers/Git/
HandleExec.rs1use serde_json::{Value, json};
8
9use crate::IPC::WindServiceHandlers::{
10 Git::Shared::{AsStringArray::Fn as AsStringArray, Generated::Fn as Generated, RunGit::Fn as RunGit},
11 Utilities::JsonValueHelpers::arg_string,
12};
13
14pub async fn Fn(Arguments:Vec<Value>) -> Result<Value, String> {
15 let (Argv, Cwd, OperationId) = match Arguments.first() {
16 Some(First) if First.is_object() => {
17 let Obj = First.as_object().unwrap();
18
19 let Argv = Obj.get("Arguments").map(AsStringArray).unwrap_or_default();
20
21 let Cwd = Obj.get("cwd").and_then(Value::as_str).unwrap_or("").to_string();
22
23 let OperationId = Obj.get("operationId").and_then(Value::as_str).unwrap_or("").to_string();
24
25 (Argv, Cwd, OperationId)
26 },
27
28 Some(First) if First.is_array() => {
29 let Argv = AsStringArray(First);
30
31 let Cwd = arg_string(&Arguments, 1);
32
33 (Argv, Cwd, String::new())
34 },
35
36 _ => (Vec::new(), String::new(), String::new()),
37 };
38
39 if Argv.is_empty() {
40 return Err("git:exec requires non-empty Arguments".to_string());
41 }
42
43 let OperationIdRef = if OperationId.is_empty() { Generated() } else { OperationId };
44
45 let CwdOpt = if Cwd.is_empty() { None } else { Some(Cwd.as_str()) };
46
47 let (ExitCode, Stdout, Stderr) = RunGit(&OperationIdRef, &Argv, CwdOpt).await?;
48
49 Ok(json!({
50 "stdout": Stdout,
51 "stderr": Stderr,
52 "exitCode": ExitCode,
53 }))
54}