restate_sdk_shared_core/
headers.rs

1use 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}