unwrap the xml lists
This commit is contained in:
		| @@ -1,22 +1,19 @@ | |||||||
| use serde::Deserialize; | use serde::{Deserialize, Deserializer}; | ||||||
|  |  | ||||||
| #[derive(Deserialize, Debug)] | #[derive(Deserialize, Debug)] | ||||||
| pub struct LanUserTable { | pub struct LanUserTable { | ||||||
|     #[serde(rename = "Ethernet")] |     #[serde(rename = "Ethernet")] | ||||||
|     pub ethernet: ClientInfos, |     #[serde(deserialize_with = "unwrap_xml_list")] | ||||||
|  |     pub ethernet: Vec<ClientInfo>, | ||||||
|     #[serde(rename = "WIFI")] |     #[serde(rename = "WIFI")] | ||||||
|     pub wifi: ClientInfos, |     #[serde(deserialize_with = "unwrap_xml_list")] | ||||||
|  |     pub wifi: Vec<ClientInfo>, | ||||||
|     #[serde(rename = "totalClient")] |     #[serde(rename = "totalClient")] | ||||||
|     pub total_clients: u32, |     pub total_clients: u32, | ||||||
|     #[serde(rename = "Customer")] |     #[serde(rename = "Customer")] | ||||||
|     pub customer: String, |     pub customer: String, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Deserialize, Debug)] |  | ||||||
| pub struct ClientInfos { |  | ||||||
|     pub clientinfo: Vec<ClientInfo>, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Deserialize, Debug)] | #[derive(Deserialize, Debug)] | ||||||
| pub struct ClientInfo { | pub struct ClientInfo { | ||||||
|     pub index: u32, |     pub index: u32, | ||||||
| @@ -32,3 +29,18 @@ pub struct ClientInfo { | |||||||
|     pub lease_time: String, |     pub lease_time: String, | ||||||
|     pub speed: u32, |     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) | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user