Mountain/Track/Effect/CreateEffectForRequest/
Storage.rs1use std::sync::Arc;
2
3use CommonLibrary::{Environment::Requires::Requires, Storage::StorageProvider::StorageProvider};
4use serde_json::{Value, json};
5use tauri::Runtime;
6
7use crate::Track::Effect::{CreateEffectForRequest::Utilities::Params::string_at, MappedEffectType::MappedEffect};
8
9pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
10 match MethodName {
11 "Storage.Get" => {
12 crate::effect!(run_time, {
13 let provider:Arc<dyn StorageProvider> = run_time.Environment.Require();
14
15 let key = string_at(&Parameters, 0);
16
17 provider
18 .GetStorageValue(false, &key)
19 .await
20 .map(|opt_val| json!(opt_val))
21 .map_err(|e| e.to_string())
22 })
23 },
24
25 "Storage.Set" => {
26 crate::effect!(run_time, {
27 let provider:Arc<dyn StorageProvider> = run_time.Environment.Require();
28
29 let key = string_at(&Parameters, 0);
30
31 let value = Parameters.get(1).cloned();
32
33 provider
34 .UpdateStorageValue(false, key, value)
35 .await
36 .map(|_| json!(null))
37 .map_err(|e| e.to_string())
38 })
39 },
40
41 "Storage.GetItems" => {
46 crate::effect!(run_time, {
47 let provider:Arc<dyn StorageProvider> = run_time.Environment.Require();
48
49 match provider.GetAllStorage(true).await {
50 Ok(State) => {
51 if let Some(Obj) = State.as_object() {
52 let Tuples:Vec<Value> = Obj
53 .iter()
54 .map(|(K, V)| {
55 let ValStr = match V {
56 Value::String(S) => S.clone(),
57 _ => V.to_string(),
58 };
59
60 json!([K, ValStr])
61 })
62 .collect();
63
64 Ok(json!(Tuples))
65 } else {
66 Ok(json!([]))
67 }
68 },
69 Err(_) => Ok(json!([])),
70 }
71 })
72 },
73
74 _ => None,
75 }
76}