1use serde::{Deserialize, Serialize};
2
3#[derive(Deserialize, Serialize, Debug)]
4pub struct Present {}
5
6#[derive(Deserialize, Serialize, Debug)]
7#[serde(rename_all = "camelCase")]
8pub enum MoblinkResult {
9 Ok(Present),
10 WrongPassword(Present),
11}
12
13#[derive(Deserialize, Debug)]
14pub struct Authentication {
15 pub challenge: String,
16 pub salt: String,
17}
18
19#[derive(Deserialize, Debug)]
20pub struct Hello {
21 #[serde(rename = "apiVersion")]
22 #[allow(dead_code)]
23 pub api_version: String,
24 pub authentication: Authentication,
25}
26
27#[derive(Deserialize, Debug)]
28pub struct Identified {
29 pub result: MoblinkResult,
30}
31
32#[derive(Deserialize, Debug)]
33pub struct StartTunnelRequest {
34 pub address: String,
35 pub port: u16,
36}
37
38#[derive(Deserialize, Debug)]
39#[serde(rename_all = "camelCase")]
40pub enum MessageRequestData {
41 StartTunnel(StartTunnelRequest),
42 Status(Present),
43}
44
45#[derive(Deserialize, Debug)]
46pub struct MessageRequest {
47 pub id: u32,
48 pub data: MessageRequestData,
49}
50
51#[derive(Serialize, Debug)]
52pub struct StartTunnelResponseData {
53 pub port: u16,
54}
55
56#[derive(Serialize, Debug)]
57#[serde(rename_all = "camelCase")]
58pub struct StatusResponseData {
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub battery_percentage: Option<i32>,
61}
62
63#[derive(Serialize, Debug)]
64#[serde(rename_all = "camelCase")]
65pub enum ResponseData {
66 StartTunnel(StartTunnelResponseData),
67 Status(StatusResponseData),
68}
69
70#[derive(Serialize, Debug)]
71pub struct MessageResponse {
72 pub id: u32,
73 pub result: MoblinkResult,
74 pub data: ResponseData,
75}
76
77#[derive(Serialize, Debug)]
78pub struct Identify {
79 pub id: String,
80 pub name: String,
81 pub authentication: String,
82}
83
84#[derive(Deserialize, Debug)]
85#[serde(rename_all = "camelCase")]
86pub enum MessageToRelay {
87 Hello(Hello),
88 Identified(Identified),
89 Request(MessageRequest),
90}
91
92#[derive(Serialize, Debug)]
93#[serde(rename_all = "camelCase")]
94pub enum MessageToStreamer {
95 Identify(Identify),
96 Response(MessageResponse),
97}