use axum::{ extract::State, response::{self, IntoResponse, Redirect}, }; use axum_extra::TypedHeader; use headers::IfNoneMatch; use crate::{error::Internal, setup::app::Setup, ui::assets::Response}; pub async fn handler( State(setup): State, TypedHeader(if_none_match): TypedHeader, ) -> Result { if setup .completed() .await .map_err(Internal::from) .map_err(Error::Internal)? { Err(Error::SetupCompleted) } else { Response::index(&if_none_match).map_err(Error::Internal) } } pub enum Error { SetupCompleted, Internal(Internal), } impl IntoResponse for Error { fn into_response(self) -> response::Response { match self { Self::SetupCompleted => Redirect::to("/login").into_response(), Self::Internal(error) => error.into_response(), } } }