parsers: add support for mediated invite syntax
This commit is contained in:
parent
c0e45b6a0f
commit
330b216f3d
2 changed files with 61 additions and 1 deletions
|
|
@ -41,6 +41,7 @@ XXXX-YY-ZZ RELEASER <admin@example.com>
|
|||
- message_correction::Replace id field is now Id instead of String (!504)
|
||||
- `Caps::hash` has been split into `Caps::hash` (the algo) and
|
||||
`Caps::ver` (the actual hash), to reflect the attributes (!517)
|
||||
- muc::MucUser now has an `invite` field
|
||||
* New parsers/serialisers:
|
||||
- Stream Features (RFC 6120) (!400)
|
||||
- Spam Reporting (XEP-0377) (!506)
|
||||
|
|
@ -49,6 +50,7 @@ XXXX-YY-ZZ RELEASER <admin@example.com>
|
|||
- Stream Limits Advertisement (XEP-0478)
|
||||
- Message Displayed Synchronization (XEP-0490)
|
||||
- RFC 6120 stream errors
|
||||
- XEP-0045 mediated invites
|
||||
* Improvements:
|
||||
- Add support for `<optional/> in XEP-0198 feature advertisment
|
||||
- Add support application-specific error conditions in XEP-0198
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use crate::message::MessagePayload;
|
|||
use crate::ns;
|
||||
use crate::presence::PresencePayload;
|
||||
|
||||
use jid::FullJid;
|
||||
use jid::{FullJid, Jid};
|
||||
|
||||
generate_attribute_enum!(
|
||||
/// Lists all of the possible status codes used in MUC presences.
|
||||
|
|
@ -237,6 +237,52 @@ impl Item {
|
|||
}
|
||||
}
|
||||
|
||||
/// Mediated invite
|
||||
#[derive(FromXml, AsXml, Debug, PartialEq, Clone)]
|
||||
#[xml(namespace = ns::MUC_USER, name = "invite")]
|
||||
pub struct Invite {
|
||||
/// Sender.
|
||||
///
|
||||
/// This is only populated for invites which have been mediated by a MUC
|
||||
/// and sent to the invitee.
|
||||
#[xml(attribute(default))]
|
||||
pub from: Option<Jid>,
|
||||
|
||||
/// Recipient.
|
||||
///
|
||||
/// This is only populated for requests to mediate an invite through a
|
||||
/// MUC, before forwarding it to the invitee.
|
||||
#[xml(attribute(default))]
|
||||
pub to: Option<Jid>,
|
||||
|
||||
/// The optional reason for the invite.
|
||||
#[xml(extract(name = "reason", default, fields(text(type_ = String))))]
|
||||
pub reason: Option<String>,
|
||||
}
|
||||
|
||||
/// Rejection of a mediated invite.
|
||||
#[derive(FromXml, AsXml, Debug, PartialEq, Clone)]
|
||||
#[xml(namespace = ns::MUC_USER, name = "decline")]
|
||||
pub struct Decline {
|
||||
/// Sender.
|
||||
///
|
||||
/// This is only populated for rejections which have been mediated by a
|
||||
/// MUC and sent to the inviter.
|
||||
#[xml(attribute(default))]
|
||||
pub from: Option<Jid>,
|
||||
|
||||
/// Recipient.
|
||||
///
|
||||
/// This is only populated for requests to decline an invite through a
|
||||
/// MUC, before forwarding it to the inviter.
|
||||
#[xml(attribute(default))]
|
||||
pub to: Option<Jid>,
|
||||
|
||||
/// The optional reason for the rejection.
|
||||
#[xml(extract(name = "reason", default, fields(text(type_ = String))))]
|
||||
pub reason: Option<String>,
|
||||
}
|
||||
|
||||
/// The main muc#user element.
|
||||
#[derive(FromXml, AsXml, Debug, PartialEq, Clone)]
|
||||
#[xml(namespace = ns::MUC_USER, name = "x")]
|
||||
|
|
@ -248,6 +294,14 @@ pub struct MucUser {
|
|||
/// List of items.
|
||||
#[xml(child(n = ..))]
|
||||
pub items: Vec<Item>,
|
||||
|
||||
/// A mediated invite
|
||||
#[xml(child(default))]
|
||||
pub invite: Option<Invite>,
|
||||
|
||||
/// A mediated invite rejection
|
||||
#[xml(child(default))]
|
||||
pub decline: Option<Decline>,
|
||||
}
|
||||
|
||||
impl Default for MucUser {
|
||||
|
|
@ -262,6 +316,8 @@ impl MucUser {
|
|||
MucUser {
|
||||
status: vec![],
|
||||
items: vec![],
|
||||
invite: None,
|
||||
decline: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -340,6 +396,8 @@ mod tests {
|
|||
let muc = MucUser {
|
||||
status: vec![],
|
||||
items: vec![],
|
||||
invite: None,
|
||||
decline: None,
|
||||
};
|
||||
let elem2 = muc.into();
|
||||
assert_eq!(elem, elem2);
|
||||
|
|
|
|||
Loading…
Reference in a new issue