1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use crate::{EventTarget, Tab};
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern "C" {
    #[derive(Debug, Clone)]
    pub type MessageSender;

    #[wasm_bindgen(method, getter)]
    pub fn tab(this: &MessageSender) -> Option<Tab>;

    // TODO is this correct ?
    #[wasm_bindgen(method, getter, js_name = frameId)]
    pub fn frame_id(this: &MessageSender) -> Option<u32>;

    #[wasm_bindgen(method, getter)]
    pub fn id(this: &MessageSender) -> Option<String>;

    #[wasm_bindgen(method, getter)]
    pub fn url(this: &MessageSender) -> Option<String>;

    #[wasm_bindgen(method, getter, js_name = tlsChannelId)]
    pub fn tls_channel_id(this: &MessageSender) -> Option<String>;
}

#[wasm_bindgen]
extern "C" {
    #[derive(Debug, Clone, PartialEq)]
    pub type Port;

    #[wasm_bindgen(method, getter)]
    pub fn name(this: &Port) -> String;

    // TODO is this correct ?
    #[wasm_bindgen(method, getter)]
    pub fn error(this: &Port) -> js_sys::Error;

    #[wasm_bindgen(method)]
    pub fn disconnect(this: &Port);

    #[wasm_bindgen(method, getter, js_name = onDisconnect)]
    pub fn on_disconnect(this: &Port) -> EventTarget;

    #[wasm_bindgen(method, getter, js_name = onMessage)]
    pub fn on_message(this: &Port) -> EventTarget;

    #[wasm_bindgen(method, js_name = postMessage)]
    pub fn post_message(this: &Port, value: &JsValue);

    #[wasm_bindgen(method, getter)]
    pub fn sender(this: &Port) -> Option<MessageSender>;
}