macros: Rename generate_element_with_only_attributes!() into generate_element!().
This commit is contained in:
parent
ef227c4617
commit
9c598fbdf9
16 changed files with 80 additions and 52 deletions
20
src/disco.rs
20
src/disco.rs
|
@ -17,22 +17,24 @@ use ns;
|
||||||
use iq::{IqGetPayload, IqResultPayload};
|
use iq::{IqGetPayload, IqResultPayload};
|
||||||
use data_forms::{DataForm, DataFormType};
|
use data_forms::{DataForm, DataFormType};
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Structure representing a `<query xmlns='http://jabber.org/protocol/disco#info'/>` element.
|
/// Structure representing a `<query xmlns='http://jabber.org/protocol/disco#info'/>` element.
|
||||||
///
|
///
|
||||||
/// It should only be used in an `<iq type='get'/>`, as it can only represent
|
/// It should only be used in an `<iq type='get'/>`, as it can only represent
|
||||||
/// the request, and not a result.
|
/// the request, and not a result.
|
||||||
DiscoInfoQuery, "query", DISCO_INFO, [
|
DiscoInfoQuery, "query", DISCO_INFO,
|
||||||
|
attributes: [
|
||||||
/// Node on which we are doing the discovery.
|
/// Node on which we are doing the discovery.
|
||||||
node: Option<String> = "node" => optional,
|
node: Option<String> = "node" => optional,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
impl IqGetPayload for DiscoInfoQuery {}
|
impl IqGetPayload for DiscoInfoQuery {}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Structure representing a `<feature xmlns='http://jabber.org/protocol/disco#info'/>` element.
|
/// Structure representing a `<feature xmlns='http://jabber.org/protocol/disco#info'/>` element.
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
Feature, "feature", DISCO_INFO, [
|
Feature, "feature", DISCO_INFO,
|
||||||
|
attributes: [
|
||||||
/// Namespace of the feature we want to represent.
|
/// Namespace of the feature we want to represent.
|
||||||
var: String = "var" => required,
|
var: String = "var" => required,
|
||||||
]);
|
]);
|
||||||
|
@ -185,21 +187,23 @@ impl From<DiscoInfoResult> for Element {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Structure representing a `<query xmlns='http://jabber.org/protocol/disco#items'/>` element.
|
/// Structure representing a `<query xmlns='http://jabber.org/protocol/disco#items'/>` element.
|
||||||
///
|
///
|
||||||
/// It should only be used in an `<iq type='get'/>`, as it can only represent
|
/// It should only be used in an `<iq type='get'/>`, as it can only represent
|
||||||
/// the request, and not a result.
|
/// the request, and not a result.
|
||||||
DiscoItemsQuery, "query", DISCO_ITEMS, [
|
DiscoItemsQuery, "query", DISCO_ITEMS,
|
||||||
|
attributes: [
|
||||||
/// Node on which we are doing the discovery.
|
/// Node on which we are doing the discovery.
|
||||||
node: Option<String> = "node" => optional,
|
node: Option<String> = "node" => optional,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
impl IqGetPayload for DiscoItemsQuery {}
|
impl IqGetPayload for DiscoItemsQuery {}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Structure representing an `<item xmlns='http://jabber.org/protocol/disco#items'/>` element.
|
/// Structure representing an `<item xmlns='http://jabber.org/protocol/disco#items'/>` element.
|
||||||
Item, "item", DISCO_ITEMS, [
|
Item, "item", DISCO_ITEMS,
|
||||||
|
attributes: [
|
||||||
/// JID of the entity pointed by this item.
|
/// JID of the entity pointed by this item.
|
||||||
jid: Jid = "jid" => required,
|
jid: Jid = "jid" => required,
|
||||||
/// Node of the entity pointed by this item.
|
/// Node of the entity pointed by this item.
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Structure representing an `<encryption xmlns='urn:xmpp:eme:0'/>` element.
|
/// Structure representing an `<encryption xmlns='urn:xmpp:eme:0'/>` element.
|
||||||
ExplicitMessageEncryption, "encryption", EME, [
|
ExplicitMessageEncryption, "encryption", EME,
|
||||||
|
attributes: [
|
||||||
/// Namespace of the encryption scheme used.
|
/// Namespace of the encryption scheme used.
|
||||||
namespace: String = "namespace" => required,
|
namespace: String = "namespace" => required,
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ generate_attribute!(Stanza, "stanza", {
|
||||||
Message => "message",
|
Message => "message",
|
||||||
}, Default = Iq);
|
}, Default = Iq);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Open, "open", IBB, [
|
generate_element!(Open, "open", IBB,
|
||||||
|
attributes: [
|
||||||
block_size: u16 = "block-size" => required,
|
block_size: u16 = "block-size" => required,
|
||||||
sid: String = "sid" => required,
|
sid: String = "sid" => required,
|
||||||
stanza: Stanza = "stanza" => default,
|
stanza: Stanza = "stanza" => default,
|
||||||
|
@ -30,7 +31,8 @@ generate_element_with_text!(Data, "data", IBB,
|
||||||
|
|
||||||
impl IqSetPayload for Data {}
|
impl IqSetPayload for Data {}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Close, "close", IBB, [
|
generate_element!(Close, "close", IBB,
|
||||||
|
attributes: [
|
||||||
sid: String = "sid" => required,
|
sid: String = "sid" => required,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
|
|
||||||
use date::DateTime;
|
use date::DateTime;
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Idle, "idle", IDLE, [
|
generate_element!(Idle, "idle", IDLE,
|
||||||
|
attributes: [
|
||||||
since: DateTime = "since" => required,
|
since: DateTime = "since" => required,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -287,7 +287,8 @@ impl From<Checksum> for Element {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Received, "received", JINGLE_FT, [
|
generate_element!(Received, "received", JINGLE_FT,
|
||||||
|
attributes: [
|
||||||
name: ContentId = "name" => required,
|
name: ContentId = "name" => required,
|
||||||
creator: Creator = "creator" => required,
|
creator: Creator = "creator" => required,
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -8,7 +8,8 @@ use ibb::Stanza;
|
||||||
|
|
||||||
generate_id!(StreamId);
|
generate_id!(StreamId);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Transport, "transport", JINGLE_IBB, [
|
generate_element!(Transport, "transport", JINGLE_IBB,
|
||||||
|
attributes: [
|
||||||
block_size: u16 = "block-size" => required,
|
block_size: u16 = "block-size" => required,
|
||||||
sid: StreamId = "sid" => required,
|
sid: StreamId = "sid" => required,
|
||||||
stanza: Stanza = "stanza" => default,
|
stanza: Stanza = "stanza" => default,
|
||||||
|
|
|
@ -30,7 +30,8 @@ generate_id!(CandidateId);
|
||||||
|
|
||||||
generate_id!(StreamId);
|
generate_id!(StreamId);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Candidate, "candidate", JINGLE_S5B, [
|
generate_element!(Candidate, "candidate", JINGLE_S5B,
|
||||||
|
attributes: [
|
||||||
cid: CandidateId = "cid" => required,
|
cid: CandidateId = "cid" => required,
|
||||||
host: IpAddr = "host" => required,
|
host: IpAddr = "host" => required,
|
||||||
jid: Jid = "jid" => required,
|
jid: Jid = "jid" => required,
|
||||||
|
|
|
@ -285,15 +285,6 @@ macro_rules! generate_empty_element {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! generate_element_with_only_attributes {
|
|
||||||
($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, [$($(#[$attr_meta:meta])* $attr:ident: $attr_type:ty = $attr_name:tt => $attr_action:tt),+,]) => (
|
|
||||||
generate_element_with_children!($(#[$meta])* $elem, $name, $ns, attributes: [$($(#[$attr_meta])* $attr: $attr_type = $attr_name => $attr_action),*], children: []);
|
|
||||||
);
|
|
||||||
($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, [$($(#[$attr_meta:meta])* $attr:ident: $attr_type:ty = $attr_name:tt => $attr_action:tt),+]) => (
|
|
||||||
generate_element_with_children!($(#[$meta])* $elem, $name, $ns, attributes: [$($(#[$attr_meta])* $attr: $attr_type = $attr_name => $attr_action),*], children: []);
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! generate_id {
|
macro_rules! generate_id {
|
||||||
($elem:ident) => (
|
($elem:ident) => (
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
@ -473,6 +464,15 @@ macro_rules! generate_serialiser {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! generate_element {
|
||||||
|
($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, attributes: [$($(#[$attr_meta:meta])* $attr:ident: $attr_type:ty = $attr_name:tt => $attr_action:tt),+,]) => (
|
||||||
|
generate_element_with_children!($(#[$meta])* $elem, $name, $ns, attributes: [$($(#[$attr_meta])* $attr: $attr_type = $attr_name => $attr_action),*], children: []);
|
||||||
|
);
|
||||||
|
($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, attributes: [$($(#[$attr_meta:meta])* $attr:ident: $attr_type:ty = $attr_name:tt => $attr_action:tt),+]) => (
|
||||||
|
generate_element_with_children!($(#[$meta])* $elem, $name, $ns, attributes: [$($(#[$attr_meta])* $attr: $attr_type = $attr_name => $attr_action),*], children: []);
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! generate_element_with_children {
|
macro_rules! generate_element_with_children {
|
||||||
($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, children: [$($(#[$child_meta:meta])* $child_ident:ident: $coucou:tt<$child_type:ty> = ($child_name:tt, $child_ns:ident) => $child_constructor:ident),*]) => (
|
($(#[$meta:meta])* $elem:ident, $name:tt, $ns:ident, children: [$($(#[$child_meta:meta])* $child_ident:ident: $coucou:tt<$child_type:ty> = ($child_name:tt, $child_ns:ident) => $child_constructor:ident),*]) => (
|
||||||
generate_element_with_children!($(#[$meta])* $elem, $name, $ns, attributes: [], children: [$($(#[$child_meta])* $child_ident: $coucou<$child_type> = ($child_name, $child_ns) => $child_constructor),*]);
|
generate_element_with_children!($(#[$meta])* $elem, $name, $ns, attributes: [], children: [$($(#[$child_meta])* $child_ident: $coucou<$child_type> = ($child_name, $child_ns) => $child_constructor),*]);
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Replace, "replace", MESSAGE_CORRECT, [
|
generate_element!(Replace, "replace", MESSAGE_CORRECT,
|
||||||
|
attributes: [
|
||||||
id: String = "id" => required,
|
id: String = "id" => required,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,8 @@ impl From<Actor> for Element {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Continue, "continue", MUC_USER, [
|
generate_element!(Continue, "continue", MUC_USER,
|
||||||
|
attributes: [
|
||||||
thread: Option<String> = "thread" => optional,
|
thread: Option<String> = "thread" => optional,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -58,9 +58,10 @@ generate_attribute!(
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// An affiliation element.
|
/// An affiliation element.
|
||||||
Affiliation, "affiliation", PUBSUB, [
|
Affiliation, "affiliation", PUBSUB,
|
||||||
|
attributes: [
|
||||||
/// The node this affiliation pertains to.
|
/// The node this affiliation pertains to.
|
||||||
node: NodeName = "node" => required,
|
node: NodeName = "node" => required,
|
||||||
|
|
||||||
|
@ -78,17 +79,19 @@ generate_element_with_children!(
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Request to create a new node.
|
/// Request to create a new node.
|
||||||
Create, "create", PUBSUB, [
|
Create, "create", PUBSUB,
|
||||||
|
attributes: [
|
||||||
/// The node name to create, if `None` the service will generate one.
|
/// The node name to create, if `None` the service will generate one.
|
||||||
node: Option<NodeName> = "node" => optional,
|
node: Option<NodeName> = "node" => optional,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// Request for a default node configuration.
|
/// Request for a default node configuration.
|
||||||
Default, "default", PUBSUB, [
|
Default, "default", PUBSUB,
|
||||||
|
attributes: [
|
||||||
/// The node targetted by this request, otherwise the entire service.
|
/// The node targetted by this request, otherwise the entire service.
|
||||||
node: Option<NodeName> = "node" => optional,
|
node: Option<NodeName> = "node" => optional,
|
||||||
|
|
||||||
|
@ -260,9 +263,10 @@ impl From<SubscribeOptions> for Element {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// A request to subscribe a JID to a node.
|
/// A request to subscribe a JID to a node.
|
||||||
Subscribe, "subscribe", PUBSUB, [
|
Subscribe, "subscribe", PUBSUB,
|
||||||
|
attributes: [
|
||||||
/// The JID being subscribed.
|
/// The JID being subscribed.
|
||||||
jid: Jid = "jid" => required,
|
jid: Jid = "jid" => required,
|
||||||
|
|
||||||
|
@ -306,9 +310,10 @@ generate_element_with_children!(
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
/// An unsubscribe request.
|
/// An unsubscribe request.
|
||||||
Unsubscribe, "unsubscribe", PUBSUB, [
|
Unsubscribe, "unsubscribe", PUBSUB,
|
||||||
|
attributes: [
|
||||||
/// The JID affected by this request.
|
/// The JID affected by this request.
|
||||||
jid: Jid = "jid" => required,
|
jid: Jid = "jid" => required,
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
|
|
||||||
generate_empty_element!(Request, "request", RECEIPTS);
|
generate_empty_element!(Request, "request", RECEIPTS);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Received, "received", RECEIPTS, [
|
generate_element!(Received, "received", RECEIPTS,
|
||||||
|
attributes: [
|
||||||
id: Option<String> = "id" => optional,
|
id: Option<String> = "id" => optional,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
25
src/sm.rs
25
src/sm.rs
|
@ -6,8 +6,9 @@
|
||||||
|
|
||||||
use stanza_error::DefinedCondition;
|
use stanza_error::DefinedCondition;
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
A, "a", SM, [
|
A, "a", SM,
|
||||||
|
attributes: [
|
||||||
h: u32 = "h" => required,
|
h: u32 = "h" => required,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -20,8 +21,9 @@ impl A {
|
||||||
|
|
||||||
generate_attribute!(ResumeAttr, "resume", bool);
|
generate_attribute!(ResumeAttr, "resume", bool);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
Enable, "enable", SM, [
|
Enable, "enable", SM,
|
||||||
|
attributes: [
|
||||||
// TODO: should be the infinite integer set ≥ 1.
|
// TODO: should be the infinite integer set ≥ 1.
|
||||||
max: Option<u32> = "max" => optional,
|
max: Option<u32> = "max" => optional,
|
||||||
resume: ResumeAttr = "resume" => default,
|
resume: ResumeAttr = "resume" => default,
|
||||||
|
@ -47,8 +49,9 @@ impl Enable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
Enabled, "enabled", SM, [
|
Enabled, "enabled", SM,
|
||||||
|
attributes: [
|
||||||
id: Option<String> = "id" => optional,
|
id: Option<String> = "id" => optional,
|
||||||
location: Option<String> = "location" => optional,
|
location: Option<String> = "location" => optional,
|
||||||
// TODO: should be the infinite integer set ≥ 1.
|
// TODO: should be the infinite integer set ≥ 1.
|
||||||
|
@ -72,15 +75,17 @@ generate_empty_element!(
|
||||||
R, "r", SM
|
R, "r", SM
|
||||||
);
|
);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
Resume, "resume", SM, [
|
Resume, "resume", SM,
|
||||||
|
attributes: [
|
||||||
h: u32 = "h" => required,
|
h: u32 = "h" => required,
|
||||||
previd: String = "previd" => required,
|
previd: String = "previd" => required,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(
|
generate_element!(
|
||||||
Resumed, "resumed", SM, [
|
Resumed, "resumed", SM,
|
||||||
|
attributes: [
|
||||||
h: u32 = "h" => required,
|
h: u32 = "h" => required,
|
||||||
previd: String = "previd" => required,
|
previd: String = "previd" => required,
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,12 +6,14 @@
|
||||||
|
|
||||||
use jid::Jid;
|
use jid::Jid;
|
||||||
|
|
||||||
generate_element_with_only_attributes!(StanzaId, "stanza-id", SID, [
|
generate_element!(StanzaId, "stanza-id", SID,
|
||||||
|
attributes: [
|
||||||
id: String = "id" => required,
|
id: String = "id" => required,
|
||||||
by: Jid = "by" => required,
|
by: Jid = "by" => required,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
generate_element_with_only_attributes!(OriginId, "origin-id", SID, [
|
generate_element!(OriginId, "origin-id", SID,
|
||||||
|
attributes: [
|
||||||
id: String = "id" => required,
|
id: String = "id" => required,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
|
|
||||||
use jid::Jid;
|
use jid::Jid;
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Stream, "stream", STREAM, [
|
generate_element!(Stream, "stream", STREAM,
|
||||||
|
attributes: [
|
||||||
from: Option<Jid> = "from" => optional,
|
from: Option<Jid> = "from" => optional,
|
||||||
to: Option<Jid> = "to" => optional,
|
to: Option<Jid> = "to" => optional,
|
||||||
id: Option<String> = "id" => optional,
|
id: Option<String> = "id" => optional,
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
|
|
||||||
use jid::Jid;
|
use jid::Jid;
|
||||||
|
|
||||||
generate_element_with_only_attributes!(Open, "open", WEBSOCKET, [
|
generate_element!(Open, "open", WEBSOCKET,
|
||||||
|
attributes: [
|
||||||
from: Option<Jid> = "from" => optional,
|
from: Option<Jid> = "from" => optional,
|
||||||
to: Option<Jid> = "to" => optional,
|
to: Option<Jid> = "to" => optional,
|
||||||
id: Option<String> = "id" => optional,
|
id: Option<String> = "id" => optional,
|
||||||
|
|
Loading…
Reference in a new issue