unifi_rs/models/
client.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase", tag = "type")]
7pub enum ClientOverview {
8    #[serde(rename = "WIRED")]
9    Wired(WiredClientOverview),
10    #[serde(rename = "WIRELESS")]
11    Wireless(WirelessClientOverview),
12    #[serde(rename = "VPN")]
13    Vpn(VpnClientOverview),
14    #[serde(rename = "TELEPORT")]
15    Teleport(TeleportClientOverview),
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct BaseClientOverview {
21    pub id: Uuid,
22    pub name: Option<String>,
23    pub connected_at: DateTime<Utc>,
24    #[serde(default)]
25    pub ip_address: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29#[serde(rename_all = "camelCase")]
30pub struct WiredClientOverview {
31    #[serde(flatten)]
32    pub base: BaseClientOverview,
33    pub mac_address: String,
34    pub uplink_device_id: Uuid,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38#[serde(rename_all = "camelCase")]
39pub struct WirelessClientOverview {
40    #[serde(flatten)]
41    pub base: BaseClientOverview,
42    pub mac_address: String,
43    pub uplink_device_id: Uuid,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(rename_all = "camelCase")]
48pub struct VpnClientOverview {
49    #[serde(flatten)]
50    pub base: BaseClientOverview,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct TeleportClientOverview {
56    #[serde(flatten)]
57    pub base: BaseClientOverview,
58}