Skip to main content

Mountain/Track/Effect/CreateEffectForRequest/
SCM.rs

1#![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}