Mountain/Track/Effect/CreateEffectForRequest/
Task.rs1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
4
5use CommonLibrary::{
6 Environment::Requires::Requires,
7 IPC::{DTO::ProxyTarget::ProxyTarget, IPCProvider::IPCProvider as IPCProviderTrait},
8};
9use serde_json::{Value, json};
10use tauri::Runtime;
11
12use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, Track::Effect::MappedEffectType::MappedEffect, dev_log};
13
14pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
15 match MethodName {
16 "Task.Fetch" => {
17 let effect =
18 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
19 Box::pin(async move {
20 let filter = Parameters.get(0).cloned().unwrap_or(Value::Null);
21 let IPCProvider:Arc<dyn IPCProviderTrait> = run_time.Environment.Require();
22 let Method = format!("{}$fetchTasks", ProxyTarget::ExtHostTaskService.GetTargetPrefix());
23 match IPCProvider
24 .SendRequestToSideCar("cocoon-main".to_string(), Method, json!([filter]), 5000)
25 .await
26 {
27 Ok(value) => Ok(value),
28 Err(error) => {
29 dev_log!(
30 "ipc",
31 "warn: [Task.Fetch] extension did not answer ({:?}); returning []",
32 error
33 );
34 Ok(json!([]))
35 },
36 }
37 })
38 };
39
40 Some(Ok(Box::new(effect)))
41 },
42
43 "Task.Execute" => {
44 let effect =
45 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
46 Box::pin(async move {
47 let task = Parameters.get(0).cloned().unwrap_or(Value::Null);
48 let IPCProvider:Arc<dyn IPCProviderTrait> = run_time.Environment.Require();
49 let Method = format!("{}$executeTask", ProxyTarget::ExtHostTaskService.GetTargetPrefix());
50 match IPCProvider
51 .SendRequestToSideCar("cocoon-main".to_string(), Method, json!([task]), 30000)
52 .await
53 {
54 Ok(value) => Ok(value),
55 Err(error) => {
56 dev_log!(
57 "ipc",
58 "warn: [Task.Execute] extension did not answer ({:?}); returning null",
59 error
60 );
61 Ok(json!(null))
62 },
63 }
64 })
65 };
66
67 Some(Ok(Box::new(effect)))
68 },
69
70 _ => None,
71 }
72}