// Copyright (c) 2017 Emmanuel Gil Peyrot // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. use xso::{FromXml, IntoXml}; use crate::iq::{IqGetPayload, IqResultPayload}; use crate::ns; /// Represents a query for the software version a remote entity is using. /// /// It should only be used in an ``, as it can only /// represent the request, and not a result. #[derive(FromXml, IntoXml, PartialEq, Debug, Clone)] #[xml(namespace = ns::VERSION, name = "query")] pub struct VersionQuery; impl IqGetPayload for VersionQuery {} generate_element!( /// Represents the answer about the software version we are using. /// /// It should only be used in an ``, as it can only /// represent the result, and not a request. VersionResult, "query", VERSION, children: [ /// The name of this client. name: Required = ("name", VERSION) => String, /// The version of this client. version: Required = ("version", VERSION) => String, /// The OS this client is running on. os: Option = ("os", VERSION) => String ] ); impl IqResultPayload for VersionResult {} #[cfg(test)] mod tests { use super::*; use crate::Element; #[cfg(target_pointer_width = "32")] #[test] fn test_size() { assert_size!(VersionQuery, 0); assert_size!(VersionResult, 36); } #[cfg(target_pointer_width = "64")] #[test] fn test_size() { assert_size!(VersionQuery, 0); assert_size!(VersionResult, 72); } #[test] fn simple() { let elem: Element = "xmpp-rs0.3.0" .parse() .unwrap(); let version = VersionResult::try_from(elem).unwrap(); assert_eq!(version.name, String::from("xmpp-rs")); assert_eq!(version.version, String::from("0.3.0")); assert_eq!(version.os, None); } #[test] fn serialisation() { let version = VersionResult { name: String::from("xmpp-rs"), version: String::from("0.3.0"), os: None, }; let elem1 = Element::from(version); let elem2: Element = "xmpp-rs0.3.0" .parse() .unwrap(); println!("{:?}", elem1); assert_eq!(elem1, elem2); } }