Mountain/IPC/WindServiceHandler/
Extension.rs1#![allow(non_snake_case)]
2
3use std::sync::Arc;
6
7use serde_json::{Value, json};
8use CommonLibrary::ExtensionManagement::ExtensionManagementService::ExtensionManagementService;
9
10use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
11
12pub async fn handle_extensions_get_all(Runtime:Arc<ApplicationRunTime>) -> Result<Value, String> {
14 let Extensions = Runtime
15 .Environment
16 .GetExtensions()
17 .await
18 .map_err(|Error| format!("extensions:getAll failed: {}", Error))?;
19
20 let ExtensionCount = Extensions.len();
21 let Response = json!(Extensions);
22 let PayloadBytes = serde_json::to_string(&Response).map(|S| S.len()).unwrap_or(0);
23
24 dev_log!(
25 "extensions",
26 "extensions:getAll returning {} extensions ({} bytes serialized)",
27 ExtensionCount,
28 PayloadBytes
29 );
30 if let Some(First) = Extensions.first() {
31 dev_log!(
32 "extensions",
33 "extensions:getAll sample: {}",
34 serde_json::to_string(First)
35 .unwrap_or_default()
36 .chars()
37 .take(300)
38 .collect::<String>()
39 );
40 } else if ExtensionCount == 0 {
41 dev_log!(
42 "extensions",
43 "warn: extensions:getAll returning EMPTY — scan has not populated ScannedExtensions, or all inserts were \
44 rejected"
45 );
46 }
47 Ok(Response)
48}
49
50pub async fn handle_extensions_get(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
52 let Id = Args
53 .first()
54 .and_then(|V| V.as_str())
55 .ok_or_else(|| "extensions:get requires string id as first argument".to_string())?
56 .to_string();
57
58 let Extension = Runtime
59 .Environment
60 .GetExtension(Id)
61 .await
62 .map_err(|Error| format!("extensions:get failed: {}", Error))?;
63
64 Ok(Extension.unwrap_or(Value::Null))
65}
66
67pub async fn handle_extensions_is_active(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
69 let Id = Args
70 .first()
71 .and_then(|V| V.as_str())
72 .ok_or_else(|| "extensions:isActive requires string id as first argument".to_string())?
73 .to_string();
74
75 let Extension = Runtime
76 .Environment
77 .GetExtension(Id)
78 .await
79 .map_err(|Error| format!("extensions:isActive failed: {}", Error))?;
80
81 Ok(json!(Extension.is_some()))
82}