Merge branch 'presence-show-option' into 'master'
presence: Remove Show::None and make presence.show Option<Show> See merge request xmpp-rs/xmpp-parsers!11
This commit is contained in:
commit
f3eac84992
1 changed files with 20 additions and 21 deletions
|
@ -19,9 +19,6 @@ pub trait PresencePayload: TryFrom<Element> + Into<Element> {}
|
||||||
/// Specifies the availability of an entity or resource.
|
/// Specifies the availability of an entity or resource.
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub enum Show {
|
pub enum Show {
|
||||||
/// Not an actual show value, but an indication there is no show set.
|
|
||||||
None,
|
|
||||||
|
|
||||||
/// The entity or resource is temporarily away.
|
/// The entity or resource is temporarily away.
|
||||||
Away,
|
Away,
|
||||||
|
|
||||||
|
@ -36,12 +33,6 @@ pub enum Show {
|
||||||
Xa,
|
Xa,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Show {
|
|
||||||
fn default() -> Show {
|
|
||||||
Show::None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromStr for Show {
|
impl FromStr for Show {
|
||||||
type Err = Error;
|
type Err = Error;
|
||||||
|
|
||||||
|
@ -59,13 +50,9 @@ impl FromStr for Show {
|
||||||
|
|
||||||
impl IntoElements for Show {
|
impl IntoElements for Show {
|
||||||
fn into_elements(self, emitter: &mut ElementEmitter) {
|
fn into_elements(self, emitter: &mut ElementEmitter) {
|
||||||
if self == Show::None {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
emitter.append_child(
|
emitter.append_child(
|
||||||
Element::builder("show")
|
Element::builder("show")
|
||||||
.append(match self {
|
.append(match self {
|
||||||
Show::None => unreachable!(),
|
|
||||||
Show::Away => Some("away"),
|
Show::Away => Some("away"),
|
||||||
Show::Chat => Some("chat"),
|
Show::Chat => Some("chat"),
|
||||||
Show::Dnd => Some("dnd"),
|
Show::Dnd => Some("dnd"),
|
||||||
|
@ -177,7 +164,7 @@ pub struct Presence {
|
||||||
pub type_: Type,
|
pub type_: Type,
|
||||||
|
|
||||||
/// The availability of the sender of this presence.
|
/// The availability of the sender of this presence.
|
||||||
pub show: Show,
|
pub show: Option<Show>,
|
||||||
|
|
||||||
/// A localised list of statuses defined in this presence.
|
/// A localised list of statuses defined in this presence.
|
||||||
pub statuses: BTreeMap<Lang, Status>,
|
pub statuses: BTreeMap<Lang, Status>,
|
||||||
|
@ -198,7 +185,7 @@ impl Presence {
|
||||||
to: None,
|
to: None,
|
||||||
id: None,
|
id: None,
|
||||||
type_,
|
type_,
|
||||||
show: Show::None,
|
show: None,
|
||||||
statuses: BTreeMap::new(),
|
statuses: BTreeMap::new(),
|
||||||
priority: 0i8,
|
priority: 0i8,
|
||||||
payloads: vec![],
|
payloads: vec![],
|
||||||
|
@ -228,7 +215,7 @@ impl Presence {
|
||||||
|
|
||||||
/// Set the availability information of this presence.
|
/// Set the availability information of this presence.
|
||||||
pub fn with_show(mut self, show: Show) -> Presence {
|
pub fn with_show(mut self, show: Show) -> Presence {
|
||||||
self.show = show;
|
self.show = Some(show);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,7 +257,7 @@ impl TryFrom<Element> for Presence {
|
||||||
to: get_attr!(root, "to", Option),
|
to: get_attr!(root, "to", Option),
|
||||||
id: get_attr!(root, "id", Option),
|
id: get_attr!(root, "id", Option),
|
||||||
type_: get_attr!(root, "type", Default),
|
type_: get_attr!(root, "type", Default),
|
||||||
show: Show::None,
|
show: None,
|
||||||
statuses: BTreeMap::new(),
|
statuses: BTreeMap::new(),
|
||||||
priority: 0i8,
|
priority: 0i8,
|
||||||
payloads: vec![],
|
payloads: vec![],
|
||||||
|
@ -307,9 +294,7 @@ impl TryFrom<Element> for Presence {
|
||||||
presence.payloads.push(elem.clone());
|
presence.payloads.push(elem.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(show) = show {
|
presence.show = show;
|
||||||
presence.show = show;
|
|
||||||
}
|
|
||||||
if let Some(priority) = priority {
|
if let Some(priority) = priority {
|
||||||
presence.priority = priority;
|
presence.priority = priority;
|
||||||
}
|
}
|
||||||
|
@ -423,7 +408,21 @@ mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let presence = Presence::try_from(elem).unwrap();
|
let presence = Presence::try_from(elem).unwrap();
|
||||||
assert_eq!(presence.payloads.len(), 0);
|
assert_eq!(presence.payloads.len(), 0);
|
||||||
assert_eq!(presence.show, Show::Chat);
|
assert_eq!(presence.show, Some(Show::Chat));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_empty_show_value() {
|
||||||
|
#[cfg(not(feature = "component"))]
|
||||||
|
let elem: Element = "<presence xmlns='jabber:client'/>"
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
|
#[cfg(feature = "component")]
|
||||||
|
let elem: Element = "<presence xmlns='jabber:component:accept'/>"
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
|
let presence = Presence::try_from(elem).unwrap();
|
||||||
|
assert_eq!(presence.show, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue