mirror of
https://gitlab.com/xmpp-rs/xmpp-rs.git
synced 2024-07-12 22:21:53 +00:00
jingle_rtp: Put Channel code into a macro, to generate it automatically.
This commit is contained in:
parent
a62b184d54
commit
ba875cfd2a
2 changed files with 28 additions and 31 deletions
|
@ -4,10 +4,6 @@
|
||||||
// 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/.
|
||||||
|
|
||||||
use std::num::ParseIntError;
|
|
||||||
use std::str::FromStr;
|
|
||||||
use minidom::IntoAttributeValue;
|
|
||||||
|
|
||||||
generate_element!(
|
generate_element!(
|
||||||
/// Wrapper element describing an RTP session.
|
/// Wrapper element describing an RTP session.
|
||||||
Description, "description", JINGLE_RTP,
|
Description, "description", JINGLE_RTP,
|
||||||
|
@ -28,33 +24,10 @@ generate_element!(
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
generate_attribute!(
|
||||||
/// The number of channels.
|
/// The number of channels.
|
||||||
#[derive(Debug, Clone)]
|
Channels, "channels", u8, Default = 1
|
||||||
pub struct Channels(pub u8);
|
);
|
||||||
|
|
||||||
impl Default for Channels {
|
|
||||||
fn default() -> Channels {
|
|
||||||
Channels(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromStr for Channels {
|
|
||||||
type Err = ParseIntError;
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Channels, ParseIntError> {
|
|
||||||
Ok(Channels(u8::from_str(s)?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoAttributeValue for Channels {
|
|
||||||
fn into_attribute_value(self) -> Option<String> {
|
|
||||||
if self.0 == 1 {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(format!("{}", self.0))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
generate_element!(
|
generate_element!(
|
||||||
/// An encoding that can be used for an RTP stream.
|
/// An encoding that can be used for an RTP stream.
|
||||||
|
|
|
@ -191,6 +191,30 @@ macro_rules! generate_attribute {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
($(#[$meta:meta])* $elem:ident, $name:tt, $type:tt, Default = $default:expr) => (
|
||||||
|
$(#[$meta])*
|
||||||
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
pub struct $elem(pub $type);
|
||||||
|
impl ::std::str::FromStr for $elem {
|
||||||
|
type Err = crate::util::error::Error;
|
||||||
|
fn from_str(s: &str) -> Result<Self, crate::util::error::Error> {
|
||||||
|
Ok($elem($type::from_str(s)?))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::minidom::IntoAttributeValue for $elem {
|
||||||
|
fn into_attribute_value(self) -> Option<String> {
|
||||||
|
match self {
|
||||||
|
$elem($default) => None,
|
||||||
|
$elem(value) => Some(format!("{}", value)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::std::default::Default for $elem {
|
||||||
|
fn default() -> $elem {
|
||||||
|
$elem($default)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! generate_element_enum {
|
macro_rules! generate_element_enum {
|
||||||
|
|
Loading…
Reference in a new issue