Mountain/Track/Effect/CreateEffectForRequest/
FileWatcher.rs1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
4
5use CommonLibrary::{Environment::Requires::Requires, FileSystem::FileWatcherProvider::FileWatcherProvider};
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 "FileWatcher.Register" => {
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 FileWatcherProvider> = run_time.Environment.Require();
18 let Handle = match Parameters.get(0) {
22 Some(Value::String(S)) => S.clone(),
23 Some(Value::Number(N)) => N.to_string(),
24 _ => String::new(),
25 };
26 let Root = Parameters.get(1).and_then(Value::as_str).unwrap_or("").to_string();
27 let IsRecursive = Parameters.get(2).and_then(Value::as_bool).unwrap_or(true);
28 let Pattern = Parameters
29 .get(3)
30 .and_then(Value::as_str)
31 .map(str::to_string)
32 .filter(|Pat| !Pat.is_empty());
33 provider
34 .RegisterWatcher(Handle, std::path::PathBuf::from(Root), IsRecursive, Pattern)
35 .await
36 .map(|_| json!(null))
37 .map_err(|e| e.to_string())
38 })
39 };
40 Some(Ok(Box::new(effect)))
41 },
42
43 "FileWatcher.Unregister" => {
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 provider:Arc<dyn FileWatcherProvider> = run_time.Environment.Require();
48 let Handle = match Parameters.get(0) {
49 Some(Value::String(S)) => S.clone(),
50 Some(Value::Number(N)) => N.to_string(),
51 _ => String::new(),
52 };
53 provider
54 .UnregisterWatcher(Handle)
55 .await
56 .map(|_| json!(null))
57 .map_err(|e| e.to_string())
58 })
59 };
60 Some(Ok(Box::new(effect)))
61 },
62
63 _ => None,
64 }
65}