restate_sdk_shared_core/
headers.rs1use std::convert::Infallible;
2use std::fmt;
3
4pub trait HeaderMap {
5 type Error: fmt::Debug;
6
7 fn extract(&self, name: &str) -> Result<Option<&str>, Self::Error>;
8}
9
10impl HeaderMap for Vec<(String, String)> {
11 type Error = Infallible;
12
13 fn extract(&self, name: &str) -> Result<Option<&str>, Self::Error> {
14 for (k, v) in self {
15 if k.eq_ignore_ascii_case(name) {
16 return Ok(Some(v));
17 }
18 }
19 Ok(None)
20 }
21}
22
23#[cfg(feature = "http")]
24impl HeaderMap for http::HeaderMap {
25 type Error = http::header::ToStrError;
26
27 fn extract(&self, name: &str) -> Result<Option<&str>, Self::Error> {
28 self.get(name).map(|hv| hv.to_str()).transpose()
29 }
30}