blob: eda82140dcf98e7fb9f1d18dc2c3956ed67f36f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
use axum::http::{HeaderName, HeaderValue};
pub struct LastEventId(pub String);
static LAST_EVENT_ID: HeaderName = HeaderName::from_static("last-event-id");
impl headers::Header for LastEventId {
fn name() -> &'static HeaderName {
&LAST_EVENT_ID
}
fn decode<'i, I>(values: &mut I) -> Result<Self, headers::Error>
where
I: Iterator<Item = &'i HeaderValue>,
{
let value = values.next().ok_or_else(headers::Error::invalid)?;
if let Ok(value) = value.to_str() {
Ok(Self(value.into()))
} else {
Err(headers::Error::invalid())
}
}
fn encode<E>(&self, values: &mut E)
where
E: Extend<HeaderValue>,
{
let Self(value) = self;
// Must panic or suppress; the trait provides no other options.
let value = HeaderValue::from_str(value).expect("LastEventId is a valid header value");
values.extend(std::iter::once(value));
}
}
|