bitwarden_ipc/wasm/
message.rs1use std::str;
2
3use wasm_bindgen::prelude::*;
4
5use crate::{
6 endpoint::Endpoint,
7 message::{IncomingMessage, OutgoingMessage},
8};
9
10#[wasm_bindgen]
11impl OutgoingMessage {
12 #[wasm_bindgen(constructor)]
13 pub fn new(payload: Vec<u8>, destination: Endpoint, topic: Option<String>) -> OutgoingMessage {
14 OutgoingMessage {
15 payload,
16 destination,
17 topic,
18 }
19 }
20
21 pub fn new_json_payload(
23 payload: JsValue,
24 destination: Endpoint,
25 topic: Option<String>,
26 ) -> Result<OutgoingMessage, JsValue> {
27 let payload = js_sys::JSON::stringify(&payload)?;
28 let payload: String = payload
29 .as_string()
30 .ok_or_else(|| JsValue::from_str("Failed to convert JSON payload to string"))?;
31 let payload = payload.into_bytes();
32 Ok(OutgoingMessage {
33 payload,
34 destination,
35 topic,
36 })
37 }
38}
39
40#[wasm_bindgen]
41impl IncomingMessage {
42 #[wasm_bindgen(constructor)]
43 pub fn new(
44 payload: Vec<u8>,
45 destination: Endpoint,
46 source: Endpoint,
47 topic: Option<String>,
48 ) -> IncomingMessage {
49 IncomingMessage {
50 payload,
51 destination,
52 source,
53 topic,
54 }
55 }
56
57 #[wasm_bindgen(
59 return_description = "The parsed JSON value, or undefined if the payload is not valid JSON."
60 )]
61 pub fn parse_payload_as_json(&self) -> JsValue {
62 str::from_utf8(&self.payload)
63 .ok()
64 .and_then(|payload| js_sys::JSON::parse(payload).ok())
65 .unwrap_or(JsValue::UNDEFINED)
66 }
67}