use super::layout::Layout; use crate::{ frontend::pages::{HtmlTemplate, MyError, MyResult}, library::{LibDirectory, LibItem, LibNode}, AppState, }; use actix_web::{get, web, Responder}; use actix_web_lab::respond::Html; use log::debug; use markup::Render; use std::{ops::Deref, sync::Arc}; #[get("/library/{path:.*}")] pub async fn page_library_node( state: web::Data, params: web::Path<(String,)>, ) -> MyResult { debug!("request: {:?}", params.0); let node = state.library.nested(¶ms.0)?; let mut out = String::new(); match node.deref() { LibNode::Directory(dir) => Layout { title: format!( "{} - Library", dir.path.file_name().unwrap().to_str().unwrap() ), main: Directory { dir: dir.clone() }, } .render(&mut out)?, LibNode::Item(item) => Layout { title: "".to_string(), main: Item { item: item.clone() }, } .render(&mut out)?, }; Ok(Html(out)) } markup::define! { Directory(dir: Arc) { h1 { @dir.data.name } } Item(item: Arc) { h1 { "thats an item" } } }