Skip to main content

Mountain/Track/Effect/CreateEffectForRequest/
Task.rs

1#![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}