sdp_rs/lines/
session_information.rs

1//! Types related to the session information line (`i=`).
2
3/// The session information line (`i=`) tokenizer. This is low level stuff and you shouldn't
4/// interact directly with it, unless you know what you are doing.
5pub use crate::tokenizers::value::Tokenizer;
6
7/// The session information line (`i=`) of SDP.
8#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Clone)]
9pub struct SessionInformation(String);
10
11impl SessionInformation {
12    pub fn new(session_information: String) -> Self {
13        Self(session_information)
14    }
15
16    pub fn value(&self) -> &str {
17        &self.0
18    }
19}
20
21impl From<SessionInformation> for String {
22    fn from(session_information: SessionInformation) -> Self {
23        session_information.0
24    }
25}
26
27impl From<String> for SessionInformation {
28    fn from(session_information: String) -> Self {
29        Self(session_information)
30    }
31}
32
33impl<'a> From<Tokenizer<'a, 'i'>> for SessionInformation {
34    fn from(tokenizer: Tokenizer<'a, 'i'>) -> Self {
35        Self(tokenizer.value.into())
36    }
37}
38
39impl std::fmt::Display for SessionInformation {
40    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
41        write!(f, "i={}", self.value())
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use super::*;
48
49    #[test]
50    fn from_tokenizer1() {
51        let tokenizer: Tokenizer<'i'> = "a value".into();
52
53        assert_eq!(
54            SessionInformation::from(tokenizer),
55            SessionInformation("a value".into())
56        );
57    }
58
59    #[test]
60    fn display1() {
61        let session_info = SessionInformation::new("A simple session".into());
62
63        assert_eq!(session_info.to_string(), "i=A simple session");
64    }
65}