Mountain/Track/Effect/CreateEffectForRequest/
Commands.rs1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
4
5use CommonLibrary::{Command::CommandExecutor::CommandExecutor, Environment::Requires::Requires};
6use serde_json::{Value, json};
7use tauri::Runtime;
8
9use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, Track::Effect::MappedEffectType::MappedEffect};
10
11pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
12 match MethodName {
13 "executeCommand" => {
14 let effect =
15 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
16 Box::pin(async move {
17 let command_executor:Arc<dyn CommandExecutor> = run_time.Environment.Require();
18 let (command_id, args) = if let Some(Object) = Parameters.as_object() {
19 let Id = Object
20 .get("command")
21 .or_else(|| Object.get("commandId"))
22 .and_then(Value::as_str)
23 .unwrap_or("")
24 .to_string();
25 let A = Object
26 .get("args")
27 .cloned()
28 .unwrap_or_else(|| Object.get("arguments").cloned().unwrap_or_default());
29 (Id, A)
30 } else {
31 let Id = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
32 let A = Parameters.get(1).cloned().unwrap_or_default();
33 (Id, A)
34 };
35 command_executor
36 .ExecuteCommand(command_id, args)
37 .await
38 .map_err(|e| e.to_string())
39 })
40 };
41
42 Some(Ok(Box::new(effect)))
43 },
44
45 "Command.Execute" => {
46 let effect =
47 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
48 Box::pin(async move {
49 let command_executor:Arc<dyn CommandExecutor> = run_time.Environment.Require();
50 let command_id = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
51 let args = Parameters.get(1).cloned().unwrap_or_default();
52 command_executor
53 .ExecuteCommand(command_id, args)
54 .await
55 .map_err(|e| e.to_string())
56 })
57 };
58
59 Some(Ok(Box::new(effect)))
60 },
61
62 "Command.GetAll" => {
63 let effect =
64 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
65 Box::pin(async move {
66 let provider:Arc<dyn CommandExecutor> = run_time.Environment.Require();
67 provider
68 .GetAllCommands()
69 .await
70 .map(|cmds| json!(cmds))
71 .map_err(|e| e.to_string())
72 })
73 };
74
75 Some(Ok(Box::new(effect)))
76 },
77
78 _ => None,
79 }
80}