Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/Window/
PostWebviewMessage.rs

1//! Push a message from the extension into the webview via
2//! `sky://webview/post-message`. Canonical kebab-case channel;
3//! `sky://webview/postMessage` has been retired.
4
5use serde_json::json;
6use tauri::Emitter;
7use tonic::{Response, Status};
8
9use crate::{
10	RPC::CocoonService::CocoonServiceImpl,
11	Vine::Generated::{Empty, PostWebviewMessageRequest, post_webview_message_request},
12	dev_log,
13};
14
15pub async fn Fn(Service:&CocoonServiceImpl, Request:PostWebviewMessageRequest) -> Result<Response<Empty>, Status> {
16	dev_log!("cocoon", "[CocoonService] post_webview_message: handle={}", Request.handle);
17
18	let Payload = match &Request.message {
19		Some(post_webview_message_request::Message::StringMessage(S)) => json!(S),
20
21		Some(post_webview_message_request::Message::BytesMessage(B)) => json!(B),
22
23		None => serde_json::Value::Null,
24	};
25
26	let _ = Service.environment.ApplicationHandle.emit(
27		"sky://webview/post-message",
28		json!({ "handle": Request.handle, "message": Payload }),
29	);
30
31	Ok(Response::new(Empty {}))
32}