Add ask attribute from RFC3921.

Fixes #1
This commit is contained in:
O01eg 2019-01-07 16:49:33 +03:00
parent 96c8b05677
commit 5ebe92c260
No known key found for this signature in database
GPG key ID: 8FBA74B3E78B4677

View file

@ -36,6 +36,14 @@ generate_attribute!(
}, Default = None }, Default = None
); );
generate_attribute!(
/// The sub-state of subscription with a contact.
Ask, "ask", {
/// Pending sub-state of the 'none' subscription state
Subscribe => "subscribe",
}
);
generate_element!( generate_element!(
/// Contact from the users contact list. /// Contact from the users contact list.
#[derive(PartialEq)] #[derive(PartialEq)]
@ -48,7 +56,10 @@ generate_element!(
name: Option<String> = "name" => optional_empty, name: Option<String> = "name" => optional_empty,
/// Subscription status of this contact. /// Subscription status of this contact.
subscription: Subscription = "subscription" => default subscription: Subscription = "subscription" => default,
///
ask: Option<Ask> = "ask" => optional_empty
], ],
children: [ children: [
@ -144,23 +155,42 @@ mod tests {
<item jid='benvolio@example.net' <item jid='benvolio@example.net'
name='Benvolio' name='Benvolio'
subscription='both'/> subscription='both'/>
<item jid='contact@example.org'
subscription='none'
ask='subscribe'
name='MyContact'>
<group>MyBuddies</group>
</item>
</query> </query>
"# "#
.parse() .parse()
.unwrap(); .unwrap();
let roster = Roster::try_from(elem).unwrap(); let roster = Roster::try_from(elem).unwrap();
assert_eq!(roster.ver, Some(String::from("ver11"))); assert_eq!(roster.ver, Some(String::from("ver11")));
assert_eq!(roster.items.len(), 3); assert_eq!(roster.items.len(), 4);
assert_eq!( assert_eq!(
roster.items[0].jid, roster.items[0].jid,
Jid::from_str("romeo@example.net").unwrap() Jid::from_str("romeo@example.net").unwrap()
); );
assert_eq!(roster.items[0].name, Some(String::from("Romeo"))); assert_eq!(roster.items[0].name, Some(String::from("Romeo")));
assert_eq!(roster.items[0].subscription, Subscription::Both); assert_eq!(roster.items[0].subscription, Subscription::Both);
assert_eq!(roster.items[0].ask, None);
assert_eq!( assert_eq!(
roster.items[0].groups, roster.items[0].groups,
vec!(Group::from_str("Friends").unwrap()) vec!(Group::from_str("Friends").unwrap())
); );
assert_eq!(
roster.items[3].jid,
Jid::from_str("contact@example.org").unwrap()
);
assert_eq!(roster.items[3].name, Some(String::from("MyContact")));
assert_eq!(roster.items[3].subscription, Subscription::None);
assert_eq!(roster.items[3].ask, Some(Ask::Subscribe));
assert_eq!(
roster.items[3].groups,
vec!(Group::from_str("MyBuddies").unwrap())
);
} }
#[test] #[test]