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 Some(Ok(Box::new(effect)))
30 },
31
32 "$scm:updateSourceControl" => {
33 let effect =
34 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
35 Box::pin(async move {
36 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
37 let handle = Parameters.get(0).and_then(Value::as_i64).map(|n| n as u32).unwrap_or(0);
38 let update = Parameters.get(1).cloned().unwrap_or_default();
39 provider
40 .UpdateSourceControl(handle, update)
41 .await
42 .map(|_| json!(null))
43 .map_err(|e| e.to_string())
44 })
45 };
46 Some(Ok(Box::new(effect)))
47 },
48
49 "$scm:updateGroup" => {
50 let effect =
51 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
52 Box::pin(async move {
53 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
54 let handle = Parameters.get(0).and_then(Value::as_i64).map(|n| n as u32).unwrap_or(0);
55 let group_data = Parameters.get(1).cloned().unwrap_or_default();
56 provider
57 .UpdateSourceControlGroup(handle, group_data)
58 .await
59 .map(|_| json!(null))
60 .map_err(|e| e.to_string())
61 })
62 };
63 Some(Ok(Box::new(effect)))
64 },
65
66 "$scm:registerInputBox" => {
67 let effect =
68 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
69 Box::pin(async move {
70 let provider:Arc<dyn SourceControlManagementProvider> = run_time.Environment.Require();
71 let handle = Parameters.get(0).and_then(Value::as_i64).map(|n| n as u32).unwrap_or(0);
72 let options = Parameters.get(1).cloned().unwrap_or_default();
73 provider
74 .RegisterInputBox(handle, options)
75 .await
76 .map(|_| json!(null))
77 .map_err(|e| e.to_string())
78 })
79 };
80 Some(Ok(Box::new(effect)))
81 },
82
83 _ => None,
84 }
85}