narrowlink_types/agent/
event.rs1use std::{net::IpAddr, str::FromStr};
2
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6use crate::{
7 error::MessageError,
8 generic::Connect,
9 policy::{self, Policy},
10 GetResponse, NatType,
11};
12
13use super::{ConstSystemInfo, DynSystemInfo};
14
15#[derive(Debug, Serialize, Deserialize, Clone)]
16pub enum InBound {
17 Connect(Uuid, Connect, Vec<Policy>),
18 IsReachable(Uuid, Connect),
19 Response(usize, Response),
20 Ping(u64),
21 Peer2Peer(Peer2PeerInstruction),
22 Shutdown,
23}
24
25#[derive(Debug, Serialize, Deserialize, Clone)]
26pub enum OutBound {
27 Pong(u64),
28 Ready(Uuid),
29 NotSure(Uuid),
30 Error(Uuid, String),
31 Request(usize, Request),
32}
33
34#[derive(Debug, Serialize, Deserialize, Clone)]
35pub enum Request {
36 UpdateDynamicSysInfo(DynSystemInfo),
37 UpdateConstantSysInfo(ConstSystemInfo),
38}
39
40#[derive(Debug, Serialize, Deserialize, Clone)]
41pub enum Response {
42 Ok,
43}
44
45impl FromStr for OutBound {
46 type Err = MessageError;
47 fn from_str(s: &str) -> Result<Self, <Self as FromStr>::Err> {
48 Ok(serde_json::from_str(s)?)
49 }
50}
51
52impl From<InBound> for Result<String, MessageError> {
53 fn from(inbound: InBound) -> Self {
54 serde_json::to_string(&inbound).map_err(|e| e.into())
55 }
56}
57
58impl GetResponse for InBound {
59 type Item = Response;
60
61 fn response(&self) -> Option<Self::Item> {
62 if let InBound::Response(_, response) = self {
63 Some(response.to_owned())
64 } else {
65 None
66 }
67 }
68}
69
70#[derive(Debug, Serialize, Deserialize, Clone)]
71pub struct Peer2PeerInstruction {
72 pub peer_ip: IpAddr,
74 pub seed_port: u16,
75 pub seq: u16,
76 pub peer_nat: NatType, pub nat: NatType, pub cert: Vec<u8>,
79 pub key: Vec<u8>,
80 pub policies: Vec<policy::Policy>,
81}
82
83impl From<&Peer2PeerInstruction> for crate::Peer2PeerInstruction {
84 fn from(instruction: &Peer2PeerInstruction) -> Self {
85 crate::Peer2PeerInstruction {
86 peer_ip: instruction.peer_ip,
87 seed_port: instruction.seed_port,
88 seq: instruction.seq,
89 peer_nat: instruction.peer_nat,
90 nat: instruction.nat,
91 }
92 }
93}