Mountain/Environment/DocumentProvider/
Notifications.rs1use std::sync::Arc;
4
5use CommonLibrary::{Environment::Requires::Requires, IPC::IPCProvider::IPCProvider};
6use serde_json::json;
7use url::Url;
8
9use crate::dev_log;
10
11pub(super) async fn notify_model_added(
13 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
14 document_state_dto:&serde_json::Value,
15) {
16 let uri_string = document_state_dto
17 .get("URI")
18 .and_then(serde_json::Value::as_str)
19 .unwrap_or("unknown");
20
21 dev_log!("model", "[DocumentProvider] Notifying ModelAdded for: {}", uri_string);
22
23 let payload = json!([document_state_dto]);
24
25 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
26
27 if let Err(error) = ipc_provider
28 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelAdded".to_string(), payload)
29 .await
30 {
31 dev_log!(
32 "model",
33 "error: [DocumentProvider] Failed to send $acceptModelAdded for {}: {}",
34 uri_string,
35 error
36 );
37 }
38}
39
40pub(super) async fn notify_model_changed(
42 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
43 uri:&Url,
44 new_version:i64,
45 changes:serde_json::Value,
46) {
47 dev_log!("model", "[DocumentProvider] Notifying ModelChanged for: {}", uri);
48
49 let uri_components = json!({ "external": uri.to_string(), "$mid": 1 });
50
51 let event_data = json!({ "versionId": new_version, "changes": changes, "isDirty": true });
52
53 let payload = json!([uri_components, event_data]);
54
55 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
56
57 if let Err(error) = ipc_provider
58 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelChanged".to_string(), payload)
59 .await
60 {
61 dev_log!(
62 "model",
63 "error: [DocumentProvider] Failed to send $acceptModelChanged for {}: {}",
64 uri,
65 error
66 );
67 }
68}
69
70pub(super) async fn notify_model_saved(
72 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
73 uri:&Url,
74) {
75 dev_log!("model", "[DocumentProvider] Notifying ModelSaved for: {}", uri);
76
77 let uri_components = json!({ "external": uri.to_string(), "$mid": 1 });
78
79 let payload = json!([uri_components]);
80
81 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
82
83 if let Err(error) = ipc_provider
84 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelSaved".to_string(), payload)
85 .await
86 {
87 dev_log!(
88 "model",
89 "error: [DocumentProvider] Failed to send $acceptModelSaved for {}: {}",
90 uri,
91 error
92 );
93 }
94}
95
96pub(super) async fn notify_model_removed(
98 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
99 uri:&Url,
100) {
101 dev_log!("model", "[DocumentProvider] Notifying ModelRemoved for: {}", uri);
102
103 let uri_components = json!({ "external": uri.to_string(), "$mid": 1 });
104
105 let payload = json!([uri_components]);
106
107 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
108
109 if let Err(error) = ipc_provider
110 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelRemoved".to_string(), payload)
111 .await
112 {
113 dev_log!(
114 "model",
115 "error: [DocumentProvider] Failed to send $acceptModelRemoved for {}: {}",
116 uri,
117 error
118 );
119 }
120}