#[derive(Debug)] #[cfg_attr( feature = "utoipa", derive(utoipa::ToSchema, serde::Deserialize, serde::Serialize), schema(example = "v0"), serde(rename_all = "lowercase") )] pub enum Version { V0, } #[cfg(feature = "axum")] mod request { use super::*; use axum::RequestPartsExt; use axum::extract::{FromRequestParts, Path}; use axum::http::StatusCode; use axum::http::request::Parts; use axum::response::{IntoResponse, Response}; use std::collections::HashMap; impl FromRequestParts for Version where S: Send + Sync, { type Rejection = Response; async fn from_request_parts( parts: &mut Parts, _state: &S, ) -> Result { let params: Path> = parts.extract().await.map_err(IntoResponse::into_response)?; let version = params .get("apiVersion") .ok_or_else(|| (StatusCode::NOT_FOUND, "version param missing").into_response())?; match version.as_str() { "v0" => Ok(Version::V0), _ => Err((StatusCode::NOT_FOUND, "unknown version").into_response()), } } } }