moblink_rust/
protocol.rs

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}