version.rs

 1// Copyright (c) 2017 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
 2//
 3// This Source Code Form is subject to the terms of the Mozilla Public
 4// License, v. 2.0. If a copy of the MPL was not distributed with this
 5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
 6
 7use iq::{IqGetPayload, IqResultPayload};
 8
 9generate_element!(
10    Version, "query", VERSION,
11    children: [
12        name: Required<String> = ("name", VERSION) => String,
13        version: Required<String> = ("version", VERSION) => String,
14        os: Option<String> = ("os", VERSION) => String
15    ]
16);
17
18impl IqGetPayload for Version {}
19impl IqResultPayload for Version {}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    use try_from::TryFrom;
25    use minidom::Element;
26    use compare_elements::NamespaceAwareCompare;
27
28    #[test]
29    fn test_simple() {
30        let elem: Element = "<query xmlns='jabber:iq:version'><name>xmpp-rs</name><version>0.3.0</version></query>".parse().unwrap();
31        let version = Version::try_from(elem).unwrap();
32        assert_eq!(version.name, String::from("xmpp-rs"));
33        assert_eq!(version.version, String::from("0.3.0"));
34        assert_eq!(version.os, None);
35    }
36
37    #[test]
38    fn serialisation() {
39        let version = Version {
40            name: String::from("xmpp-rs"),
41            version: String::from("0.3.0"),
42            os: None,
43        };
44        let elem1 = Element::from(version);
45        let elem2: Element = "<query xmlns='jabber:iq:version'><name>xmpp-rs</name><version>0.3.0</version></query>".parse().unwrap();
46        println!("{:?}", elem1);
47        assert!(elem1.compare_to(&elem2));
48    }
49}