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 let key = string_at(&Parameters, 0);
15 provider
16 .GetStorageValue(false, &key)
17 .await
18 .map(|opt_val| json!(opt_val))
19 .map_err(|e| e.to_string())
20 })
21 },
22
23 "Storage.Set" => {
24 crate::effect!(run_time, {
25 let provider:Arc<dyn StorageProvider> = run_time.Environment.Require();
26 let key = string_at(&Parameters, 0);
27 let value = Parameters.get(1).cloned();
28 provider
29 .UpdateStorageValue(false, key, value)
30 .await
31 .map(|_| json!(null))
32 .map_err(|e| e.to_string())
33 })
34 },
35
36 "Storage.GetItems" => {
41 crate::effect!(run_time, {
42 let provider:Arc<dyn StorageProvider> = run_time.Environment.Require();
43 match provider.GetAllStorage(true).await {
44 Ok(State) => {
45 if let Some(Obj) = State.as_object() {
46 let Tuples:Vec<Value> = Obj
47 .iter()
48 .map(|(K, V)| {
49 let ValStr = match V {
50 Value::String(S) => S.clone(),
51 _ => V.to_string(),
52 };
53 json!([K, ValStr])
54 })
55 .collect();
56 Ok(json!(Tuples))
57 } else {
58 Ok(json!([]))
59 }
60 },
61 Err(_) => Ok(json!([])),
62 }
63 })
64 },
65
66 _ => None,
67 }
68}