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