diff --git a/connectbox/src/models.rs b/connectbox/src/models.rs index a3c66e8..af3a100 100644 --- a/connectbox/src/models.rs +++ b/connectbox/src/models.rs @@ -1,22 +1,19 @@ -use serde::Deserialize; +use serde::{Deserialize, Deserializer}; #[derive(Deserialize, Debug)] pub struct LanUserTable { #[serde(rename = "Ethernet")] - pub ethernet: ClientInfos, + #[serde(deserialize_with = "unwrap_xml_list")] + pub ethernet: Vec, #[serde(rename = "WIFI")] - pub wifi: ClientInfos, + #[serde(deserialize_with = "unwrap_xml_list")] + pub wifi: Vec, #[serde(rename = "totalClient")] pub total_clients: u32, #[serde(rename = "Customer")] pub customer: String, } -#[derive(Deserialize, Debug)] -pub struct ClientInfos { - pub clientinfo: Vec, -} - #[derive(Deserialize, Debug)] pub struct ClientInfo { pub index: u32, @@ -32,3 +29,18 @@ pub struct ClientInfo { pub lease_time: String, pub speed: u32, } + +#[derive(Deserialize)] +struct List { + #[serde(rename = "$value")] + #[serde(default = "Vec::default")] + elems: Vec, +} + +fn unwrap_xml_list<'de, D, T>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, + T: Deserialize<'de> +{ + Ok(List::deserialize(deserializer)?.elems) +}