composable_tower_http/extract/
optional.rs1use http::HeaderMap;
2
3use crate::error::InfallibleError;
4
5use super::extractor::Extractor;
6
7#[derive(Debug, Clone)]
8pub struct Optional<T> {
9 inner: T,
10}
11
12impl<T> Optional<T> {
13 pub const fn new(inner: T) -> Self {
14 Self { inner }
15 }
16}
17
18impl<Ex> Extractor for Optional<Ex>
19where
20 Ex: Extractor + Sync,
21{
22 type Extracted = Option<Ex::Extracted>;
23
24 type Error = InfallibleError;
25
26 async fn extract(&self, headers: &HeaderMap) -> Result<Self::Extracted, Self::Error> {
27 Ok(self.inner.extract(headers).await.ok())
28 }
29}