74 lines · 2.1 KB · Rust
RawDownload
pub mod events;pub mod extensions; use crate::Result;use axum::{headers::Header, http::HeaderName};use std::sync::OnceLock; pub use extensions::fetch_extensions_from_blob_store_periodically; pub struct CloudflareIpCountryHeader(String); impl Header for CloudflareIpCountryHeader {    fn name() -> &'static HeaderName {        static CLOUDFLARE_IP_COUNTRY_HEADER: OnceLock<HeaderName> = OnceLock::new();        CLOUDFLARE_IP_COUNTRY_HEADER.get_or_init(|| HeaderName::from_static("cf-ipcountry"))    }     fn decode<'i, I>(values: &mut I) -> Result<Self, axum::headers::Error>    where        Self: Sized,        I: Iterator<Item = &'i axum::http::HeaderValue>,    {        let country_code = values            .next()            .ok_or_else(axum::headers::Error::invalid)?            .to_str()            .map_err(|_| axum::headers::Error::invalid())?;         Ok(Self(country_code.to_string()))    }     fn encode<E: Extend<axum::http::HeaderValue>>(&self, _values: &mut E) {        unimplemented!()    }} impl std::fmt::Display for CloudflareIpCountryHeader {    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {        write!(f, "{}", self.0)    }} pub struct SystemIdHeader(String); impl Header for SystemIdHeader {    fn name() -> &'static HeaderName {        static SYSTEM_ID_HEADER: OnceLock<HeaderName> = OnceLock::new();        SYSTEM_ID_HEADER.get_or_init(|| HeaderName::from_static("x-zed-system-id"))    }     fn decode<'i, I>(values: &mut I) -> Result<Self, axum::headers::Error>    where        Self: Sized,        I: Iterator<Item = &'i axum::http::HeaderValue>,    {        let system_id = values            .next()            .ok_or_else(axum::headers::Error::invalid)?            .to_str()            .map_err(|_| axum::headers::Error::invalid())?;         Ok(Self(system_id.to_string()))    }     fn encode<E: Extend<axum::http::HeaderValue>>(&self, _values: &mut E) {        unimplemented!()    }} impl std::fmt::Display for SystemIdHeader {    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {        write!(f, "{}", self.0)    }}