ftth_rsip/headers/typed/
accept.rs1#[doc(hidden)]
2pub use super::tokenizers::NameParamsListTokenizer as Tokenizer;
3
4use super::MediaType;
5use crate::Error;
6use rsip_derives::TypedHeader;
7use std::convert::TryFrom;
8
9#[derive(TypedHeader, Eq, PartialEq, Clone, Debug)]
11pub struct Accept(pub Vec<MediaType>);
12
13impl From<Vec<MediaType>> for Accept {
14 fn from(media_types: Vec<MediaType>) -> Self {
15 Self(media_types)
16 }
17}
18
19impl<'a> TryFrom<Tokenizer<'a>> for Accept {
20 type Error = crate::Error;
21
22 fn try_from(tokenizer: Tokenizer) -> Result<Self, Self::Error> {
23 let media_types = tokenizer
24 .0
25 .into_iter()
26 .map(MediaType::try_from)
27 .collect::<Result<Vec<MediaType>, Error>>()?;
28 Ok(Self(media_types))
29 }
30}
31
32impl std::fmt::Display for Accept {
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 write!(
35 f,
36 "{}",
37 self.0
38 .iter()
39 .map(|m| m.to_string())
40 .collect::<Vec<String>>()
41 .join(", ")
42 )
43 }
44}