zlayer_types/api/
overlay.rs1use serde::{Deserialize, Serialize};
7use utoipa::ToSchema;
8
9#[derive(Debug, Serialize, Deserialize, ToSchema)]
11pub struct OverlayStatusResponse {
12 pub interface: String,
14 pub is_leader: bool,
16 pub node_ip: String,
18 pub cidr: String,
20 pub port: u16,
22 pub total_peers: usize,
24 pub healthy_peers: usize,
26 pub unhealthy_peers: usize,
28 pub last_check: u64,
30}
31
32#[derive(Debug, Serialize, Deserialize, ToSchema)]
34pub struct PeerInfo {
35 pub public_key: String,
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub overlay_ip: Option<String>,
40 pub healthy: bool,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub last_handshake_secs: Option<u64>,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub last_ping_ms: Option<u64>,
48 pub failure_count: u32,
50 pub last_check: u64,
52}
53
54#[derive(Debug, Serialize, Deserialize, ToSchema)]
56pub struct PeerListResponse {
57 pub total: usize,
59 pub healthy: usize,
61 pub peers: Vec<PeerInfo>,
63}
64
65#[derive(Debug, Serialize, Deserialize, ToSchema)]
67pub struct IpAllocationResponse {
68 pub cidr: String,
70 pub total_ips: u32,
72 pub allocated_count: usize,
74 pub available_count: u32,
76 pub utilization_percent: f64,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub allocated_ips: Option<Vec<String>>,
81}
82
83#[derive(Debug, Serialize, Deserialize, ToSchema)]
85pub struct NatStatusResponse {
86 pub enabled: bool,
88 pub stun_servers: Vec<String>,
90 pub turn_servers: Vec<String>,
92 #[serde(skip_serializing_if = "Option::is_none")]
94 pub relay_server_bind: Option<String>,
95 pub candidates: Vec<NatCandidateDto>,
97 pub peers: Vec<NatPeerDto>,
99 pub last_refresh: u64,
101}
102
103#[derive(Debug, Serialize, Deserialize, ToSchema)]
105pub struct NatCandidateDto {
106 pub kind: String,
108 pub transport: String,
110 pub address: String,
112 pub priority: u32,
114}
115
116#[derive(Debug, Serialize, Deserialize, ToSchema)]
118pub struct NatPeerDto {
119 pub node_id: String,
121 pub connection_type: String,
123 #[serde(skip_serializing_if = "Option::is_none")]
125 pub remote_endpoint: Option<String>,
126}
127
128#[derive(Debug, Serialize, Deserialize, ToSchema)]
130pub struct DnsStatusResponse {
131 pub enabled: bool,
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub zone: Option<String>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub port: Option<u16>,
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub bind_addr: Option<String>,
142 pub service_count: usize,
144 pub services: Vec<String>,
146}