jid: implement custom (De)Serializer for a prettier visual
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
91c8045329
commit
8bf643a84f
1 changed files with 43 additions and 3 deletions
|
@ -20,7 +20,7 @@ use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
/// An error that signifies that a `Jid` cannot be parsed from a string.
|
/// An error that signifies that a `Jid` cannot be parsed from a string.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
@ -159,7 +159,6 @@ impl TryFrom<Jid> for FullJid {
|
||||||
///
|
///
|
||||||
/// Unlike a `BareJid`, it always contains a resource, and should only be used when you are certain
|
/// Unlike a `BareJid`, it always contains a resource, and should only be used when you are certain
|
||||||
/// there is no case where a resource can be missing. Otherwise, use a `Jid` enum.
|
/// there is no case where a resource can be missing. Otherwise, use a `Jid` enum.
|
||||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
||||||
#[derive(Clone, PartialEq, Eq, Hash)]
|
#[derive(Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct FullJid {
|
pub struct FullJid {
|
||||||
/// The node part of the Jabber ID, if it exists, else None.
|
/// The node part of the Jabber ID, if it exists, else None.
|
||||||
|
@ -179,7 +178,6 @@ pub struct FullJid {
|
||||||
///
|
///
|
||||||
/// Unlike a `FullJid`, it can’t contain a resource, and should only be used when you are certain
|
/// Unlike a `FullJid`, it can’t contain a resource, and should only be used when you are certain
|
||||||
/// there is no case where a resource can be set. Otherwise, use a `Jid` enum.
|
/// there is no case where a resource can be set. Otherwise, use a `Jid` enum.
|
||||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
||||||
#[derive(Clone, PartialEq, Eq, Hash)]
|
#[derive(Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct BareJid {
|
pub struct BareJid {
|
||||||
/// The node part of the Jabber ID, if it exists, else None.
|
/// The node part of the Jabber ID, if it exists, else None.
|
||||||
|
@ -259,6 +257,26 @@ impl fmt::Display for BareJid {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
impl Serialize for FullJid {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
serializer.serialize_str(String::from(self).as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
impl Serialize for BareJid {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
serializer.serialize_str(String::from(self).as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
enum ParserState {
|
enum ParserState {
|
||||||
Node,
|
Node,
|
||||||
Domain,
|
Domain,
|
||||||
|
@ -350,6 +368,28 @@ impl FromStr for FullJid {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
impl<'de> Deserialize<'de> for FullJid {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let s = String::deserialize(deserializer)?;
|
||||||
|
FullJid::from_str(&s).map_err(de::Error::custom)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
impl<'de> Deserialize<'de> for BareJid {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let s = String::deserialize(deserializer)?;
|
||||||
|
BareJid::from_str(&s).map_err(de::Error::custom)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FullJid {
|
impl FullJid {
|
||||||
/// Constructs a full Jabber ID containing all three components.
|
/// Constructs a full Jabber ID containing all three components.
|
||||||
///
|
///
|
||||||
|
|
Loading…
Reference in a new issue