куки, если я пишу свой экстрактор.
Я вижу уже написаные экстракторы для куки, но они работают для хендлеров, а мне необходимо получить их именно в экстракторе для продолжения работы. Есть ли способ не парсить ручками?
Как такой вариант? use axum::{ extract::{rejection::TypedHeaderRejection, FromRequestParts}, headers::Cookie, http::request::Parts, TypedHeader, }; struct MyCookieData { name: String, } #[async_trait::async_trait] impl<S: Send + Sync> FromRequestParts<S> for MyCookieData { type Rejection = TypedHeaderRejection; async fn from_request_parts(parts: &mut Parts, state: &S) -> Result<Self, Self::Rejection> { let cookie: TypedHeader<Cookie> = TypedHeader::from_request_parts(parts, state).await?; let name = cookie.get("name").unwrap_or_default().to_owned(); Ok(MyCookieData { name }) } }
Большое спасибо! Посмотрю как дома буду
Лучше не используй cookie в случае с API. Выше бойлерплейтное решение, можно проще🥸
Написать более генерик экстрактор для Cookie trait CookieKey { const KEY: &'static str; } pub enum NameCookie {} impl CookieKey for NameCookie { const KEY = "name"; } pub struct TypedCookie<T: CookieKey> { ... } Ну ты понял дальше что. Это писать больше один раз, если понадобится множество возможных ключей — быстрее так.
...надо бы это в библиотеку оформить, если уже нет
Обсуждают сегодня