@@ -17,6 +17,13 @@ generate_id!(
ParticipantId
);
+impl ParticipantId {
+ /// Create a new ParticipantId.
+ pub fn new<P: Into<String>>(participant: P) -> ParticipantId {
+ ParticipantId(participant.into())
+ }
+}
+
generate_id!(
/// A MIX channel identifier.
ChannelId
@@ -38,6 +45,16 @@ generate_element!(
impl PubSubPayload for Participant {}
+impl Participant {
+ /// Create a new MIX participant.
+ pub fn new<J: Into<String>, N: Into<String>>(jid: J, nick: N) -> Participant {
+ Participant {
+ nick: nick.into(),
+ jid: jid.into(),
+ }
+ }
+}
+
generate_element!(
/// A node to subscribe to.
Subscribe, "subscribe", MIX_CORE,
@@ -47,6 +64,15 @@ generate_element!(
]
);
+impl Subscribe {
+ /// Create a new Subscribe element.
+ pub fn new<N: Into<String>>(node: N) -> Subscribe {
+ Subscribe {
+ node: NodeName(node.into()),
+ }
+ }
+}
+
generate_element!(
/// A request from a user’s server to join a MIX channel.
Join, "join", MIX_CORE,
@@ -66,6 +92,28 @@ generate_element!(
impl IqSetPayload for Join {}
impl IqResultPayload for Join {}
+impl Join {
+ /// Create a new Join element.
+ pub fn from_nick_and_nodes<N: Into<String>>(nick: N, nodes: &[&str]) -> Join {
+ let subscribes = nodes
+ .into_iter()
+ .cloned()
+ .map(|n| Subscribe::new(n))
+ .collect();
+ Join {
+ id: None,
+ nick: nick.into(),
+ subscribes,
+ }
+ }
+
+ /// Sets the JID on this update-subscription.
+ pub fn with_id<I: Into<String>>(mut self, id: I) -> Self {
+ self.id = Some(ParticipantId(id.into()));
+ self
+ }
+}
+
generate_element!(
/// Update a given subscription.
UpdateSubscription, "update-subscription", MIX_CORE,
@@ -85,6 +133,27 @@ generate_element!(
impl IqSetPayload for UpdateSubscription {}
impl IqResultPayload for UpdateSubscription {}
+impl UpdateSubscription {
+ /// Create a new UpdateSubscription element.
+ pub fn from_nodes(nodes: &[&str]) -> UpdateSubscription {
+ let subscribes = nodes
+ .into_iter()
+ .cloned()
+ .map(|n| Subscribe::new(n))
+ .collect();
+ UpdateSubscription {
+ jid: None,
+ subscribes,
+ }
+ }
+
+ /// Sets the JID on this update-subscription.
+ pub fn with_jid(mut self, jid: BareJid) -> Self {
+ self.jid = Some(jid);
+ self
+ }
+}
+
generate_empty_element!(
/// Request to leave a given MIX channel. It will automatically unsubscribe the user from all
/// nodes on this channel.
@@ -108,6 +177,13 @@ generate_element!(
impl IqSetPayload for SetNick {}
impl IqResultPayload for SetNick {}
+impl SetNick {
+ /// Create a new SetNick element.
+ pub fn new<N: Into<String>>(nick: N) -> SetNick {
+ SetNick { nick: nick.into() }
+ }
+}
+
generate_element!(
/// Message payload describing who actually sent the message, since unlike in MUC, all messages
/// are sent from the channel’s JID.
@@ -124,6 +200,16 @@ generate_element!(
impl MessagePayload for Mix {}
+impl Mix {
+ /// Create a new Mix element.
+ pub fn new<N: Into<String>, J: Into<String>>(nick: N, jid: J) -> Mix {
+ Mix {
+ nick: nick.into(),
+ jid: jid.into(),
+ }
+ }
+}
+
generate_element!(
/// Create a new MIX channel.
Create, "create", MIX_CORE,
@@ -136,6 +222,20 @@ generate_element!(
impl IqSetPayload for Create {}
impl IqResultPayload for Create {}
+impl Create {
+ /// Create a new ad-hoc Create element.
+ pub fn new() -> Create {
+ Create { channel: None }
+ }
+
+ /// Create a new Create element with a channel identifier.
+ pub fn from_channel_id<C: Into<String>>(channel: C) -> Create {
+ Create {
+ channel: Some(ChannelId(channel.into())),
+ }
+ }
+}
+
generate_element!(
/// Destroy a given MIX channel.
Destroy, "destroy", MIX_CORE,
@@ -149,6 +249,15 @@ generate_element!(
// other section so far.
impl IqSetPayload for Destroy {}
+impl Destroy {
+ /// Create a new Destroy element.
+ pub fn new<C: Into<String>>(channel: C) -> Destroy {
+ Destroy {
+ channel: ChannelId(channel.into()),
+ }
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;