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			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}