unifly_core/model/
client.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use std::net::IpAddr;
6
7use super::common::{Bandwidth, DataSource};
8use super::entity_id::{EntityId, MacAddress};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
12#[non_exhaustive]
13pub enum ClientType {
14 Wired,
15 Wireless,
16 Vpn,
17 Teleport,
18 Unknown,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct GuestAuth {
24 pub authorized: bool,
25 pub method: Option<String>,
26 pub expires_at: Option<DateTime<Utc>>,
27 pub tx_bytes: Option<u64>,
28 pub rx_bytes: Option<u64>,
29 pub elapsed_minutes: Option<u64>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct WirelessInfo {
35 pub ssid: Option<String>,
36 pub bssid: Option<MacAddress>,
37 pub channel: Option<u32>,
38 pub frequency_ghz: Option<f32>,
39 pub signal_dbm: Option<i32>,
40 pub noise_dbm: Option<i32>,
41 pub satisfaction: Option<u8>,
42 pub tx_rate_kbps: Option<u64>,
43 pub rx_rate_kbps: Option<u64>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct Client {
49 pub id: EntityId,
50 pub mac: MacAddress,
51 pub ip: Option<IpAddr>,
52 pub name: Option<String>,
53 pub hostname: Option<String>,
54 pub client_type: ClientType,
55
56 pub connected_at: Option<DateTime<Utc>>,
58 pub uplink_device_id: Option<EntityId>,
59 pub uplink_device_mac: Option<MacAddress>,
60 pub network_id: Option<EntityId>,
61 pub vlan: Option<u16>,
62
63 pub wireless: Option<WirelessInfo>,
65
66 pub guest_auth: Option<GuestAuth>,
68 pub is_guest: bool,
69
70 pub tx_bytes: Option<u64>,
72 pub rx_bytes: Option<u64>,
73 pub bandwidth: Option<Bandwidth>,
74
75 pub os_name: Option<String>,
77 pub device_class: Option<String>,
78
79 pub blocked: bool,
81
82 #[serde(skip)]
83 #[allow(dead_code)]
84 pub(crate) source: DataSource,
85 #[serde(skip)]
86 #[allow(dead_code)]
87 pub(crate) updated_at: DateTime<Utc>,
88}