Commit 59c52ce0 authored by nanamicat's avatar nanamicat

fix

parent af20c5e8
......@@ -17,7 +17,6 @@ pub struct Router {
#[derive(Serialize, Deserialize, Clone)]
pub struct Gateway {
pub id: GatewayID,
#[serde(deserialize_with = "deserialize_router_id", serialize_with = "serialize_router_id")]
pub router: RouterID,
pub cost_outbound: i32,
pub metrics: Vec<i32>,
......@@ -32,7 +31,7 @@ pub struct GatewayGroup {
pub include_routers: Vec<RouterID>,
pub exclude_routers: Vec<RouterID>,
pub children: Vec<String>,
pub desk_mark: u16,
pub dest_mark: u16,
}
#[derive(Serialize, Deserialize, Clone)]
......@@ -52,7 +51,7 @@ pub enum Schema {
#[derive(Serialize, Deserialize, PartialEq, Clone)]
pub struct Region {}
#[derive(Serialize, Deserialize, Encode, Decode, Clone, Copy, Default, Ord, PartialOrd, Eq, PartialEq, Debug)]
#[derive(Encode, Decode, Clone, Copy, Default, Ord, PartialOrd, Eq, PartialEq, Debug)]
pub struct RouterID(pub u8);
impl Symbol for RouterID {
......@@ -134,26 +133,27 @@ where
data
}
fn deserialize_router_id<'de, D>(deserializer: D) -> Result<RouterID, D::Error>
where
impl<'de> Deserialize<'de> for RouterID {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
ROUTER_ID_REGISTRY
.get()
.unwrap()
.get(&String::deserialize(deserializer)?)
.ok_or_else(|| serde::de::Error::custom(format!("Unknown router")))
{
match serde_json::Value::deserialize(deserializer)? {
serde_json::Value::Number(n) => Ok(RouterID(n.as_u64().ok_or_else(|| serde::de::Error::custom("Invalid router id"))? as u8)),
serde_json::Value::String(s) => match s.parse::<u8>() {
Ok(id) => Ok(RouterID(id)),
Err(_) => ROUTER_ID_REGISTRY.get().unwrap().get(&s).ok_or_else(|| serde::de::Error::custom(format!("Unknown router {}", s))),
},
_ => Err(serde::de::Error::custom("Invalid router id type")),
}
}
}
fn serialize_router_id<S>(id: &RouterID, serializer: S) -> Result<S::Ok, S::Error>
where
impl Serialize for RouterID {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(
ROUTER_ID_REGISTRY
.get()
.unwrap()
.resolve(*id)
.ok_or_else(|| serde::ser::Error::custom(format!("Unknown id: {}", id.0)))?,
)
{
serializer.serialize_u8(self.0)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment