jid_prep: Add constructor, documentation, and switch from Option<String> to String.

This commit is contained in:
Emmanuel Gil Peyrot 2019-09-08 16:22:12 +02:00
parent 9941e9c34f
commit a9a68cb1d7
2 changed files with 29 additions and 7 deletions

View file

@ -5,25 +5,34 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
use crate::iq::{IqGetPayload, IqResultPayload}; use crate::iq::{IqGetPayload, IqResultPayload};
use crate::util::helpers::{PlainText, JidCodec}; use crate::util::helpers::{Text, JidCodec};
use jid::Jid; use jid::Jid;
generate_element!( generate_element!(
/// TODO /// Request from a client to stringprep/PRECIS a string into a JID.
JidPrepQuery, "jid", JID_PREP, JidPrepQuery, "jid", JID_PREP,
text: ( text: (
/// TODO /// The potential JID.
data: PlainText<Option<String>> data: Text<String>
) )
); );
impl IqGetPayload for JidPrepQuery {} impl IqGetPayload for JidPrepQuery {}
impl JidPrepQuery {
/// Create a new JID Prep query.
pub fn new<J: Into<String>>(jid: J) -> JidPrepQuery {
JidPrepQuery {
data: jid.into(),
}
}
}
generate_element!( generate_element!(
/// TODO /// Response from the server with the stringprepd/PRECISd JID.
JidPrepResponse, "jid", JID_PREP, JidPrepResponse, "jid", JID_PREP,
text: ( text: (
/// TODO /// The JID.
jid: JidCodec<Jid> jid: JidCodec<Jid>
) )
); );
@ -47,7 +56,7 @@ mod tests {
fn simple() { fn simple() {
let elem: Element = "<jid xmlns='urn:xmpp:jidprep:0'>ROMeo@montague.lit/orchard</jid>".parse().unwrap(); let elem: Element = "<jid xmlns='urn:xmpp:jidprep:0'>ROMeo@montague.lit/orchard</jid>".parse().unwrap();
let query = JidPrepQuery::try_from(elem).unwrap(); let query = JidPrepQuery::try_from(elem).unwrap();
assert_eq!(query.data.unwrap(), "ROMeo@montague.lit/orchard"); assert_eq!(query.data, "ROMeo@montague.lit/orchard");
let elem: Element = "<jid xmlns='urn:xmpp:jidprep:0'>romeo@montague.lit/orchard</jid>".parse().unwrap(); let elem: Element = "<jid xmlns='urn:xmpp:jidprep:0'>romeo@montague.lit/orchard</jid>".parse().unwrap();
let response = JidPrepResponse::try_from(elem).unwrap(); let response = JidPrepResponse::try_from(elem).unwrap();

View file

@ -8,6 +8,19 @@ use crate::util::error::Error;
use jid::Jid; use jid::Jid;
use std::str::FromStr; use std::str::FromStr;
/// Codec for text content.
pub struct Text;
impl Text {
pub fn decode(s: &str) -> Result<String, Error> {
Ok(s.to_owned())
}
pub fn encode(string: &str) -> Option<String> {
Some(string.to_owned())
}
}
/// Codec for plain text content. /// Codec for plain text content.
pub struct PlainText; pub struct PlainText;