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 Some(Ok(Box::new(effect)))
40 },
41
42 "Task.Execute" => {
43 let effect =
44 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
45 Box::pin(async move {
46 let task = Parameters.get(0).cloned().unwrap_or(Value::Null);
47 let IPCProvider:Arc<dyn IPCProviderTrait> = run_time.Environment.Require();
48 let Method = format!("{}$executeTask", ProxyTarget::ExtHostTaskService.GetTargetPrefix());
49 match IPCProvider
50 .SendRequestToSideCar("cocoon-main".to_string(), Method, json!([task]), 30000)
51 .await
52 {
53 Ok(value) => Ok(value),
54 Err(error) => {
55 dev_log!(
56 "ipc",
57 "warn: [Task.Execute] extension did not answer ({:?}); returning null",
58 error
59 );
60 Ok(json!(null))
61 },
62 }
63 })
64 };
65 Some(Ok(Box::new(effect)))
66 },
67
68 _ => None,
69 }
70}