Mountain/Track/Effect/CreateEffectForRequest/
SCM.rs1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
4
5use CommonLibrary::{
6 Environment::Requires::Requires,
7 SourceControlManagement::SourceControlManagementProvider::SourceControlManagementProvider,
8};
9use serde_json::{Value, json};
10use tauri::Runtime;
11
12use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, Track::Effect::MappedEffectType::MappedEffect};
13
14pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
15 match MethodName {
16 "$scm:createSourceControl" => {
17 let effect =
18 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
19 Box::pin(async move {
20 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
21 let resource = Parameters.get(0).cloned().unwrap_or_default();
22 provider
23 .CreateSourceControl(resource)
24 .await
25 .map(|handle| json!(handle))
26 .map_err(|e| e.to_string())
27 })
28 };
29
30 Some(Ok(Box::new(effect)))
31 },
32
33 "$scm:updateSourceControl" => {
34 let effect =
35 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
36 Box::pin(async move {
37 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
38 let handle = Parameters.get(0).and_then(Value::as_i64).map(|n| n as u32).unwrap_or(0);
39 let update = Parameters.get(1).cloned().unwrap_or_default();
40 provider
41 .UpdateSourceControl(handle, update)
42 .await
43 .map(|_| json!(null))
44 .map_err(|e| e.to_string())
45 })
46 };
47
48 Some(Ok(Box::new(effect)))
49 },
50
51 "$scm:updateGroup" => {
52 let effect =
53 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
54 Box::pin(async move {
55 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
56 let handle = Parameters.get(0).and_then(Value::as_i64).map(|n| n as u32).unwrap_or(0);
57 let group_data = Parameters.get(1).cloned().unwrap_or_default();
58 provider
59 .UpdateSourceControlGroup(handle, group_data)
60 .await
61 .map(|_| json!(null))
62 .map_err(|e| e.to_string())
63 })
64 };
65
66 Some(Ok(Box::new(effect)))
67 },
68
69 "$scm:registerInputBox" => {
70 let effect =
71 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
72 Box::pin(async move {
73 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
74 let handle = Parameters.get(0).and_then(Value::as_i64).map(|n| n as u32).unwrap_or(0);
75 let options = Parameters.get(1).cloned().unwrap_or_default();
76 provider
77 .RegisterInputBox(handle, options)
78 .await
79 .map(|_| json!(null))
80 .map_err(|e| e.to_string())
81 })
82 };
83
84 Some(Ok(Box::new(effect)))
85 },
86
87 _ => None,
88 }
89}