Mountain/Track/Effect/CreateEffectForRequest/
FileWatcher.rs1use std::sync::Arc;
2
3use CommonLibrary::{Environment::Requires::Requires, FileSystem::FileWatcherProvider::FileWatcherProvider};
4use serde_json::{Value, json};
5use tauri::Runtime;
6
7use crate::Track::Effect::{
8 CreateEffectForRequest::Utilities::Params::{bool_at_true, string_at},
9 MappedEffectType::MappedEffect,
10};
11
12pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
13 match MethodName {
14 "FileWatcher.Register" => {
15 crate::effect!(run_time, {
16 let provider:Arc<dyn FileWatcherProvider> = run_time.Environment.Require();
17
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
27 let Root = string_at(&Parameters, 1);
28
29 let IsRecursive = bool_at_true(&Parameters, 2);
30
31 let Pattern = Parameters
32 .get(3)
33 .and_then(Value::as_str)
34 .map(str::to_string)
35 .filter(|Pat| !Pat.is_empty());
36
37 provider
38 .RegisterWatcher(Handle, std::path::PathBuf::from(Root), IsRecursive, Pattern)
39 .await
40 .map(|_| json!(null))
41 .map_err(|e| e.to_string())
42 })
43 },
44
45 "FileWatcher.Unregister" => {
46 crate::effect!(run_time, {
47 let provider:Arc<dyn FileWatcherProvider> = run_time.Environment.Require();
48
49 let Handle = match Parameters.get(0) {
50 Some(Value::String(S)) => S.clone(),
51 Some(Value::Number(N)) => N.to_string(),
52 _ => String::new(),
53 };
54
55 provider
56 .UnregisterWatcher(Handle)
57 .await
58 .map(|_| json!(null))
59 .map_err(|e| e.to_string())
60 })
61 },
62
63 _ => None,
64 }
65}