sip_codec/
headers.rs

1use http::header::{HeaderMap, HeaderValue};
2
3pub mod allow;
4pub mod content_length;
5pub mod max_forwards;
6pub mod user_agent;
7
8pub trait ParseHeader: Sized {
9	fn header_name() -> &'static [&'static str];
10	fn decode<'a>(headers: impl IntoIterator<Item = &'a HeaderValue>) -> Option<Self>;
11}
12
13pub trait EncodeHeader: Into<String> {}
14
15pub trait HeaderMapParse {
16	fn typed_get<T: ParseHeader>(&self) -> Option<T>;
17}
18
19impl HeaderMapParse for HeaderMap {
20	fn typed_get<T: ParseHeader>(&self) -> Option<T> {
21		T::decode(
22			T::header_name()
23				.iter()
24				.map(|name| self.get_all(*name))
25				.flatten(),
26		)
27	}
28}