pub mod get { use axum::{ extract::State, response::{self, IntoResponse, Redirect}, }; use crate::{ app::App, error::Internal, ui::assets::{Asset, Assets}, }; pub async fn handler(State(app): State) -> Result { if app .setup() .completed() .await .map_err(Internal::from) .map_err(Error::Internal)? { Err(Error::SetupCompleted) } else { Assets::index().map_err(Error::Internal) } } #[derive(Debug, thiserror::Error)] pub enum Error { #[error("setup already completed")] SetupCompleted, #[error("{0}")] 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(), } } } }