stun_rs/attributes/ice/use_candidate.rs
1const USE_CANDIDATE: u16 = 0x0025;
2
3crate::common::empty_attribute!(
4 /// The controlling agent MUST include the [`UseCandidate`] attribute in
5 /// order to nominate a candidate pair
6 /// [Section 8.1.1](https://datatracker.ietf.org/doc/html/rfc8445#section-8.1.1).
7 /// The controlled agent MUST NOT include the [`UseCandidate`] attribute in a Binding request.
8 ///
9 /// # Examples
10 ///```rust
11 /// # use stun_rs::attributes::{AttributeType, StunAttributeType};
12 /// # use stun_rs::attributes::ice::UseCandidate;
13 /// let attr = UseCandidate::default();
14 /// assert_eq!(attr.attribute_type(), AttributeType::from(0x0025));
15 ///```
16 UseCandidate,
17 USE_CANDIDATE,
18);
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use crate::StunAttribute;
24
25 #[test]
26 fn use_candidate_stunt_attribute() {
27 let attr = StunAttribute::UseCandidate(UseCandidate::default());
28 assert!(attr.is_use_candidate());
29 assert!(attr.as_use_candidate().is_ok());
30 assert!(attr.as_error_code().is_err());
31
32 assert!(attr.attribute_type().is_comprehension_required());
33 assert!(!attr.attribute_type().is_comprehension_optional());
34
35 let dbg_fmt = format!("{:?}", attr);
36 assert_eq!("UseCandidate(UseCandidate)", dbg_fmt);
37 }
38}