jid: Add optional quote support
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
2f47bdb1d3
commit
ec969a78fc
2 changed files with 38 additions and 0 deletions
|
@ -23,7 +23,12 @@ memchr = "2.5"
|
|||
minidom = { version = "0.15", optional = true }
|
||||
serde = { version = "1.0", features = ["derive"], optional = true }
|
||||
stringprep = "0.1.3"
|
||||
quote = { version = "1.0", optional = true }
|
||||
proc-macro2 = { version = "1.0", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
serde_test = "1"
|
||||
jid = { path = ".", features = [ "serde" ] }
|
||||
|
||||
[features]
|
||||
quote = ["dep:quote", "dep:proc-macro2"]
|
||||
|
|
|
@ -38,6 +38,11 @@ use std::str::FromStr;
|
|||
#[cfg(feature = "serde")]
|
||||
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
#[cfg(feature = "quote")]
|
||||
use proc_macro2::TokenStream;
|
||||
#[cfg(feature = "quote")]
|
||||
use quote::{quote, ToTokens};
|
||||
|
||||
mod error;
|
||||
pub use crate::error::Error;
|
||||
|
||||
|
@ -369,6 +374,34 @@ impl<'de> Deserialize<'de> for BareJid {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "quote")]
|
||||
impl ToTokens for Jid {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
tokens.extend(match self {
|
||||
Jid::Full(full) => quote! { Jid::Full(#full) },
|
||||
Jid::Bare(bare) => quote! { Jid::Bare(#bare) },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "quote")]
|
||||
impl ToTokens for FullJid {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let inner = &self.inner.normalized;
|
||||
let t = quote! { FullJid::new(#inner).unwrap() };
|
||||
tokens.extend(t);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "quote")]
|
||||
impl ToTokens for BareJid {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let inner = &self.inner.normalized;
|
||||
let t = quote! { BareJid::new(#inner).unwrap() };
|
||||
tokens.extend(t);
|
||||
}
|
||||
}
|
||||
|
||||
impl FullJid {
|
||||
/// Constructs a full Jabber ID containing all three components. This is of the form
|
||||
/// `node@domain/resource`, where node part is optional.
|
||||
|
|
Loading…
Reference in a new issue