Mountain/Environment/
CustomEditorProvider.rs1#![allow(non_snake_case, non_camel_case_types)]
15
16use std::sync::Arc;
17
18use Common::{
19 CustomEditor::CustomEditorProvider::CustomEditorProvider,
20 Environment::Requires::Requires,
21 Error::CommonError::CommonError,
22 IPC::{DTO::ProxyTarget::ProxyTarget, IPCProvider::IPCProvider},
23};
24use async_trait::async_trait;
25use log::{info, warn};
26use serde_json::{Value, json};
27use url::Url;
28
29use super::MountainEnvironment::MountainEnvironment;
30
31#[async_trait]
32impl CustomEditorProvider for MountainEnvironment {
33 async fn RegisterCustomEditorProvider(&self, _ViewType:String, _OptionsValue:Value) -> Result<(), CommonError> {
34 info!("[CustomEditorProvider] Registering provider for view type: {}", _ViewType);
35 Ok(())
39 }
40
41 async fn UnregisterCustomEditorProvider(&self, _ViewType:String) -> Result<(), CommonError> {
42 info!("[CustomEditorProvider] Unregistering provider for view type: {}", _ViewType);
43 Ok(())
45 }
46
47 async fn OnSaveCustomDocument(&self, _ViewType:String, _ResourceURI:Url) -> Result<(), CommonError> {
48 warn!("[CustomEditorProvider] OnSaveCustomDocument is not fully implemented.");
49 Ok(())
52 }
53
54 async fn ResolveCustomEditor(
55 &self,
56 ViewType:String,
57 ResourceURI:Url,
58 WebViewPanelHandle:String,
59 ) -> Result<(), CommonError> {
60 info!(
61 "[CustomEditorProvider] Resolving custom editor for '{}' on resource '{}'",
62 ViewType, ResourceURI
63 );
64
65 let IPCProvider:Arc<dyn IPCProvider> = self.Require();
74 let ResourceURIComponents = json!({ "external": ResourceURI.to_string() });
75 let RPCMethod = format!("{}$resolveCustomEditor", ProxyTarget::ExtHostCustomEditors.GetTargetPrefix());
76 let RPCParameters = json!([ResourceURIComponents, ViewType, WebViewPanelHandle]);
77
78 IPCProvider
81 .SendNotificationToSideCar("cocoon-main".to_string(), RPCMethod, RPCParameters)
82 .await
83 }
84}