use askama::Template; use super::views::{ BagOptionView, BagView, BrewDefaultsView, BrewView, CafeOptionView, CafeView, CupView, GearOptionView, GearView, ListNavigator, Paginated, RoastOptionView, RoastView, RoasterOptionView, RoasterView, TimelineEventView, TimelineMonthView, }; use crate::domain::bags::BagSortKey; use crate::domain::brews::BrewSortKey; use crate::domain::cafes::CafeSortKey; use crate::domain::cups::CupSortKey; use crate::domain::gear::GearSortKey; use crate::domain::roasters::RoasterSortKey; use crate::domain::roasts::{RoastSortKey, RoastWithRoaster}; use crate::domain::timeline::TimelineSortKey; #[derive(Template)] #[template(path = "roasters.html")] pub struct RoastersTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub roasters: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/roaster_list.html")] pub struct RoasterListTemplate { pub is_authenticated: bool, pub roasters: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "roaster_detail.html")] pub struct RoasterDetailTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub roaster: RoasterView, pub roasts: Vec, } #[derive(Template)] #[template(path = "roasts.html")] pub struct RoastsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub roasts: Paginated, pub roaster_options: Vec, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "roast_detail.html")] pub struct RoastDetailTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub roast: RoastView, pub bags: Vec, } #[derive(Template)] #[template(path = "partials/roast_list.html")] pub struct RoastListTemplate { pub is_authenticated: bool, pub roasts: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "timeline.html")] pub struct TimelineTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub events: Paginated, pub navigator: ListNavigator, pub months: Vec, } #[derive(Template)] #[template(path = "partials/timeline_chunk.html")] pub struct TimelineChunkTemplate { pub is_authenticated: bool, pub events: Paginated, pub navigator: ListNavigator, pub months: Vec, } #[derive(Template)] #[template(path = "bags.html")] pub struct BagsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub open_bags: Vec, pub bags: Paginated, pub roaster_options: Vec, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/bag_list.html")] pub struct BagListTemplate { pub is_authenticated: bool, pub open_bags: Vec, pub bags: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "gear.html")] pub struct GearTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub gear: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/gear_list.html")] pub struct GearListTemplate { pub is_authenticated: bool, pub gear: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/roast_options.html")] pub struct RoastOptionsTemplate { pub roasts: Vec, } #[derive(Template)] #[template(path = "brews.html")] pub struct BrewsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub brews: Paginated, pub bag_options: Vec, pub grinder_options: Vec, pub brewer_options: Vec, pub filter_paper_options: Vec, pub defaults: BrewDefaultsView, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/brew_list.html")] pub struct BrewListTemplate { pub is_authenticated: bool, pub brews: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "cafes.html")] pub struct CafesTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub cafes: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/cafe_list.html")] pub struct CafeListTemplate { pub is_authenticated: bool, pub cafes: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "cafe_detail.html")] pub struct CafeDetailTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub cafe: CafeView, } #[derive(Template)] #[template(path = "cups.html")] pub struct CupsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, pub cups: Paginated, pub roast_options: Vec, pub cafe_options: Vec, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "partials/cup_list.html")] pub struct CupListTemplate { pub is_authenticated: bool, pub cups: Paginated, pub navigator: ListNavigator, } #[derive(Template)] #[template(path = "scan.html")] pub struct ScanTemplate { pub nav_active: &'static str, pub is_authenticated: bool, pub has_ai_extract: bool, } pub fn render_template(template: T) -> Result { template.render() }