Skip to main content

Mountain/Command/SourceControlManagement/
GetSCMResourceChanges.rs

1#![allow(non_snake_case)]
2
3//! Tauri command - list resources for a given SCM provider. The
4//! resources map is keyed by `(group_id, …)`; we flatten across
5//! groups and filter by `ProviderHandle == ProviderIdentifier`.
6
7use std::sync::Arc;
8
9use serde_json::{Value, json};
10use tauri::{State, command};
11
12use crate::{
13	ApplicationState::State::ApplicationState::{ApplicationState, MapLockError},
14	dev_log,
15};
16
17#[command]
18pub async fn GetSCMResourceChanges(
19	State:State<'_, Arc<ApplicationState>>,
20
21	ProviderIdentifier:String,
22) -> Result<Value, String> {
23	dev_log!("commands", "getting resource changes for provider: {}", ProviderIdentifier);
24
25	let resources_map = State
26		.Feature
27		.Markers
28		.SourceControlManagementResources
29		.lock()
30		.map_err(MapLockError)
31		.map_err(|Error| Error.to_string())?
32		.clone();
33
34	let provider_handle_u32 = ProviderIdentifier.parse::<u32>().unwrap_or(0);
35
36	let ProviderResources:Vec<_> = resources_map
37		.iter()
38		.flat_map(|(_group_id, group_resources)| group_resources.values())
39		.flat_map(|vec_resources| vec_resources.iter())
40		.filter(|r| r.ProviderHandle == provider_handle_u32)
41		.cloned()
42		.collect();
43
44	Ok(json!({ "resources": ProviderResources }))
45}