hightower_client/
types.rs

1use serde::{Deserialize, Serialize};
2use std::net::SocketAddr;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct NetworkInfo {
6    pub public_ip: String,
7    pub public_port: u16,
8    pub local_ip: String,
9    pub local_port: u16,
10}
11
12/// Information about a peer in the network
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct PeerInfo {
15    /// Node ID (e.g., "ht-festive-penguin-abc123")
16    pub node_id: String,
17    /// WireGuard public key (hex encoded)
18    pub public_key_hex: String,
19    /// Assigned IP on the WireGuard network (e.g., "100.64.0.5")
20    pub assigned_ip: String,
21    /// Public internet endpoint (optional, for NAT traversal)
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub endpoint: Option<SocketAddr>,
24}
25
26#[derive(Debug, Serialize)]
27pub(crate) struct RegistrationRequest<'a> {
28    pub public_key_hex: &'a str,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub public_ip: Option<&'a str>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub public_port: Option<u16>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub local_ip: Option<&'a str>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub local_port: Option<u16>,
37}
38
39#[derive(Debug, Deserialize)]
40pub(crate) struct RegistrationResponse {
41    pub node_id: String,
42    pub token: String,
43    pub gateway_public_key_hex: String,
44    pub assigned_ip: String,
45}