rtsp_types/headers/
seek_style.rs1use super::*;
6
7use std::fmt;
8
9#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12pub enum SeekStyle {
13 Rap,
14 CoRap,
15 FirstPrior,
16 Next,
17 Extension(String),
18}
19
20impl SeekStyle {
21 pub fn as_str(&self) -> &str {
22 match self {
23 SeekStyle::Rap => "RAP",
24 SeekStyle::CoRap => "CoRAP",
25 SeekStyle::FirstPrior => "First-Prior",
26 SeekStyle::Next => "Next",
27 SeekStyle::Extension(ref s) => s.as_str(),
28 }
29 }
30}
31
32impl fmt::Display for SeekStyle {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 f.write_str(self.as_str())
35 }
36}
37
38impl std::str::FromStr for SeekStyle {
39 type Err = HeaderParseError;
40
41 fn from_str(s: &str) -> Result<Self, HeaderParseError> {
42 match s {
43 "RAP" => Ok(SeekStyle::Rap),
44 "CoRAP" => Ok(SeekStyle::CoRap),
45 "First-Prior" => Ok(SeekStyle::FirstPrior),
46 "Next" => Ok(SeekStyle::Next),
47 _ => Ok(SeekStyle::Extension(String::from(s))),
48 }
49 }
50}
51
52impl super::TypedHeader for SeekStyle {
53 fn from_headers(headers: impl AsRef<Headers>) -> Result<Option<Self>, HeaderParseError> {
54 let headers = headers.as_ref();
55
56 let header = match headers.get(&SEEK_STYLE) {
57 None => return Ok(None),
58 Some(header) => header,
59 };
60
61 let seek_style = header.as_str().parse().map_err(|_| HeaderParseError)?;
62
63 Ok(Some(seek_style))
64 }
65
66 fn insert_into(&self, mut headers: impl AsMut<Headers>) {
67 let headers = headers.as_mut();
68
69 headers.insert(SEEK_STYLE, self.to_string());
70 }
71}