settings.rs (996B)
1 use askama::Template; 2 use axum::{ 3 extract::Query, 4 response::{Html, Response}, 5 }; 6 use serde::Deserialize; 7 8 use crate::error::AppError; 9 use crate::sse; 10 use crate::templates::{ApplicationTemplate, SettingsTabTemplate, SettingsTemplate}; 11 12 #[derive(Debug, Deserialize)] 13 pub struct SettingsQuery { 14 #[serde(default = "default_tab")] 15 pub tab: String, 16 } 17 18 fn default_tab() -> String { 19 "general".to_string() 20 } 21 22 pub async fn open_settings(Query(query): Query<SettingsQuery>) -> Result<Html<String>, AppError> { 23 let settings_template = SettingsTemplate { tab: query.tab }; 24 let settings_content = settings_template.render()?; 25 let template = ApplicationTemplate { 26 content: settings_content, 27 }; 28 Ok(Html(template.render()?)) 29 } 30 31 pub async fn open_settings_tab( 32 Query(query): Query<SettingsQuery>, 33 ) -> Result<Response, AppError> { 34 let template = SettingsTabTemplate { tab: query.tab }; 35 let html = template.render()?; 36 Ok(sse::patch_elements(&html)) 37 }