sip-codec 0.1.0

tokio_codec for Session Initiation Protocol (SIP)
Documentation
use http::header::{HeaderMap, HeaderValue};

pub mod allow;
pub mod content_length;
pub mod max_forwards;
pub mod user_agent;

pub trait ParseHeader: Sized {
	fn header_name() -> &'static [&'static str];
	fn decode<'a>(headers: impl IntoIterator<Item = &'a HeaderValue>) -> Option<Self>;
}

pub trait EncodeHeader: Into<String> {}

pub trait HeaderMapParse {
	fn typed_get<T: ParseHeader>(&self) -> Option<T>;
}

impl HeaderMapParse for HeaderMap {
	fn typed_get<T: ParseHeader>(&self) -> Option<T> {
		T::decode(
			T::header_name()
				.iter()
				.map(|name| self.get_all(*name))
				.flatten(),
		)
	}
}