Mountain/Track/Effect/CreateEffectForRequest/
Storage.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, Storage::StorageProvider::StorageProvider};
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 "Storage.Get" => {
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 StorageProvider> = run_time.Environment.Require();
18 let key = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
19 provider
20 .GetStorageValue(false, &key)
21 .await
22 .map(|opt_val| json!(opt_val))
23 .map_err(|e| e.to_string())
24 })
25 };
26
27 Some(Ok(Box::new(effect)))
28 },
29
30 "Storage.Set" => {
31 let effect =
32 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
33 Box::pin(async move {
34 let provider:Arc<dyn StorageProvider> = run_time.Environment.Require();
35 let key = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
36 let value = Parameters.get(1).cloned();
37 provider
38 .UpdateStorageValue(false, key, value)
39 .await
40 .map(|_| json!(null))
41 .map_err(|e| e.to_string())
42 })
43 };
44
45 Some(Ok(Box::new(effect)))
46 },
47
48 _ => None,
49 }
50}