Skip to content

Commit

Permalink
Merge branch 'serde_support' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
1zun4 committed Nov 29, 2023
2 parents 81537c7 + 0f5e970 commit 91b30df
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions azalea-protocol/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,33 @@ impl Display for ServerAddress {
}
}

///
/// Serde Deserialization for ServerAddress
/// This is necessary for config file usage
/// We are not using TryFrom because we want to use the serde error system
///
impl<'de> serde::Deserialize<'de> for ServerAddress {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> {
let string = String::deserialize(deserializer)?;
let mut parts = string.split(':');
let host = parts.next().ok_or(serde::de::Error::custom("No host specified"))?.to_string();
// default the port to 25565
let port = parts.next().unwrap_or("25565");
let port = u16::from_str(port).map_err(|_| serde::de::Error::custom("Invalid port specified"))?;
Ok(ServerAddress { host, port })
}
}

///
/// Serde Serialization for ServerAddress
/// Pretty much like impl Display
///
impl serde::Serialize for ServerAddress {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
serializer.serialize_str(&format!("{}:{}", self.host, self.port))
}
}

#[cfg(test)]
mod tests {
use std::io::Cursor;
Expand Down

0 comments on commit 91b30df

Please sign in to comment.