Skip to main content

Mountain/Track/Effect/CreateEffectForRequest/
Diagnostics.rs

1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
4
5use CommonLibrary::{Diagnostic::DiagnosticManager::DiagnosticManager, 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		"Diagnostic.Set" => {
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 provider:Arc<dyn DiagnosticManager> = run_time.Environment.Require();
18						let owner = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
19						let entries = Parameters.get(1).cloned().unwrap_or_default();
20						provider
21							.SetDiagnostics(owner, entries)
22							.await
23							.map(|_| json!(null))
24							.map_err(|e| e.to_string())
25					})
26				};
27			Some(Ok(Box::new(effect)))
28		},
29
30		"Diagnostic.Clear" => {
31			let effect =
32				move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
33					Box::pin(async move {
34						let provider:Arc<dyn DiagnosticManager> = run_time.Environment.Require();
35						let owner = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
36						provider
37							.ClearDiagnostics(owner)
38							.await
39							.map(|_| json!(null))
40							.map_err(|e| e.to_string())
41					})
42				};
43			Some(Ok(Box::new(effect)))
44		},
45
46		_ => None,
47	}
48}