Mountain/Track/Effect/CreateEffectForRequest/
Search.rs1use std::sync::Arc;
19
20use serde_json::{Value, json};
21use tauri::Runtime;
22use CommonLibrary::{
23 Environment::Requires::Requires,
24 Search::SearchProvider::SearchProvider,
25 Workspace::WorkspaceProvider::WorkspaceProvider,
26};
27
28use crate::Track::Effect::{CreateEffectForRequest::Utilities::Params::val_at, MappedEffectType::MappedEffect};
29
30pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
31 match MethodName {
32 "findFiles" | "findTextInFiles" => {
33 let MethodNameOwned = MethodName.to_string();
34
35 crate::effect!(run_time, {
36 let _workspace:Arc<dyn WorkspaceProvider> = run_time.Environment.Require();
37
38 let provider:Arc<dyn SearchProvider> = run_time.Environment.Require();
39
40 let Args = if let Some(Object) = Parameters.as_object() {
45 (
46 Object.get("pattern").cloned().unwrap_or_default(),
47 Object.get("options").cloned().unwrap_or_default(),
48 )
49 } else if Parameters.is_array() {
50 (val_at(&Parameters, 0), val_at(&Parameters, 1))
51 } else {
52 (Parameters.clone(), Value::Null)
53 };
54
55 let (Pattern, Options) = Args;
56
57 if MethodNameOwned == "findTextInFiles" {
58 return provider.TextSearch(Pattern, Options).await.map_err(|e| e.to_string());
59 }
60
61 if Pattern.is_null() {
67 return Ok(json!([]));
68 }
69
70 let Exclude = Options.get("exclude").cloned().filter(|V| !V.is_null());
71
72 let MaxResults = Options.get("maxResults").and_then(Value::as_u64).map(|N| N as usize);
73
74 let UseIgnoreFiles = Options.get("useIgnoreFiles").and_then(Value::as_bool).unwrap_or(true);
75
76 let FollowSymlinks = Options.get("followSymlinks").and_then(Value::as_bool).unwrap_or(false);
77
78 let Urls = run_time
79 .Environment
80 .FindFilesInWorkspace(Pattern, Exclude, MaxResults, UseIgnoreFiles, FollowSymlinks)
81 .await
82 .map_err(|Error| Error.to_string())?;
83
84 Ok(json!(Urls.into_iter().map(|U| U.to_string()).collect::<Vec<_>>()))
85 })
86 },
87
88 "Search.TextSearch" => {
89 crate::effect!(run_time, {
90 let provider:Arc<dyn SearchProvider> = run_time.Environment.Require();
91
92 let query = val_at(&Parameters, 0);
93
94 let options = val_at(&Parameters, 1);
95
96 provider.TextSearch(query, options).await.map_err(|e| e.to_string())
97 })
98 },
99
100 _ => None,
101 }
102}