sdp_rs/lines/
session_name.rs

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