unwrap the xml lists

This commit is contained in:
lemonsh 2023-04-29 22:11:16 +02:00
parent 9e929d1bae
commit 4b91e6f405

View File

@ -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<ClientInfo>,
#[serde(rename = "WIFI")]
pub wifi: ClientInfos,
#[serde(deserialize_with = "unwrap_xml_list")]
pub wifi: Vec<ClientInfo>,
#[serde(rename = "totalClient")]
pub total_clients: u32,
#[serde(rename = "Customer")]
pub customer: String,
}
#[derive(Deserialize, Debug)]
pub struct ClientInfos {
pub clientinfo: Vec<ClientInfo>,
}
#[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<T> {
#[serde(rename = "$value")]
#[serde(default = "Vec::default")]
elems: Vec<T>,
}
fn unwrap_xml_list<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de>
{
Ok(List::deserialize(deserializer)?.elems)
}