Skip to main content

Mountain/RPC/CocoonService/Window/
OnDidReceiveMessage.rs

1#![allow(non_snake_case)]
2
3//! Forward a webview→extension message to Sky on
4//! `sky://webview/post-message`. The protobuf `oneof` is normalised to
5//! a JSON value (string or bytes).
6
7use serde_json::json;
8use tauri::Emitter;
9use tonic::{Response, Status};
10
11use crate::{
12	RPC::CocoonService::CocoonServiceImpl,
13	Vine::Generated::{Empty, OnDidReceiveMessageRequest, on_did_receive_message_request},
14	dev_log,
15};
16
17pub async fn Fn(Service:&CocoonServiceImpl, Request:OnDidReceiveMessageRequest) -> Result<Response<Empty>, Status> {
18	dev_log!("cocoon", "[CocoonService] on_did_receive_message: handle={}", Request.handle);
19
20	let Payload = match &Request.message {
21		Some(on_did_receive_message_request::Message::StringMessage(S)) => json!(S),
22		Some(on_did_receive_message_request::Message::BytesMessage(B)) => json!(B),
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}