Rust library to generate static websites
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: remove buggy module generation macro

+31 -66
+1 -3
crates/framework/src/lib.rs
··· 10 10 // Re-exported dependencies for user convenience 11 11 pub use rustc_hash::FxHashMap; 12 12 13 - pub use maudit_macros::generate_pages_mod; 14 - 15 13 // Internal modules 16 14 mod logging; 17 15 ··· 38 36 39 37 #[macro_export] 40 38 macro_rules! routes { 41 - [$($route:ident),*] => { 39 + [$($route:path),*] => { 42 40 vec![$(&$route),*] 43 41 }; 44 42 }
-54
crates/macros/src/lib.rs
··· 26 26 } 27 27 } 28 28 29 - struct GeneratePagesModAttributes { 30 - directory: Option<String>, 31 - } 32 - 33 - impl Parse for GeneratePagesModAttributes { 34 - fn parse(input: ParseStream) -> Result<Self> { 35 - let directory = input.parse::<Option<LitStr>>()?; 36 - 37 - Ok(GeneratePagesModAttributes { 38 - directory: directory.map(|d| d.value()), 39 - }) 40 - } 41 - } 42 - 43 - #[proc_macro] 44 - pub fn generate_pages_mod(item: TokenStream) -> TokenStream { 45 - // Add support for passing a directory to generate the pages mod 46 - let attributes: GeneratePagesModAttributes = syn::parse_macro_input!(item); 47 - 48 - let directory = attributes.directory.unwrap_or("pages".to_string()); 49 - 50 - let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); 51 - let directory_files = std::fs::read_dir(format!( 52 - "{}/src/{}", 53 - manifest_dir, 54 - directory.trim_start_matches('/') 55 - )) 56 - .unwrap(); 57 - 58 - let mut page_mods = Vec::new(); 59 - 60 - for file in directory_files { 61 - let file = file.unwrap(); 62 - let file_name = file.file_name(); 63 - let file_name = file_name.to_str().unwrap(); 64 - let file_name = file_name.trim_end_matches(".rs"); 65 - 66 - page_mods.push(format_ident!("{}", file_name)); 67 - } 68 - 69 - let expanded = quote! { 70 - mod pages { 71 - #( 72 - mod #page_mods; 73 - pub use #page_mods::*; 74 - )* 75 - } 76 - 77 - pub use pages::*; 78 - }; 79 - 80 - TokenStream::from(expanded) 81 - } 82 - 83 29 #[proc_macro_attribute] 84 30 pub fn route(attrs: TokenStream, item: TokenStream) -> TokenStream { 85 31 // Parse the input tokens into a syntax tree
+7 -2
examples/basics/src/main.rs
··· 1 1 mod layout; 2 2 3 - use maudit::{coronate, generate_pages_mod, routes, BuildOptions, BuildOutput}; 3 + use maudit::{coronate, routes, BuildOptions, BuildOutput}; 4 + 5 + mod pages { 6 + mod index; 7 + pub use index::Index; 8 + } 4 9 5 - generate_pages_mod!(); 10 + pub use pages::Index; 6 11 7 12 fn main() -> Result<BuildOutput, Box<dyn std::error::Error>> { 8 13 coronate(routes![Index], vec![].into(), BuildOptions::default())
+8 -3
examples/blog/src/main.rs
··· 3 3 use content::ArticleContent; 4 4 use maudit::{ 5 5 content::{glob_markdown, ContentSource, ContentSources}, 6 - coronate, generate_pages_mod, routes, BuildOptions, BuildOutput, 6 + coronate, routes, BuildOptions, BuildOutput, 7 7 }; 8 8 9 - generate_pages_mod!(); 9 + mod pages { 10 + mod article; 11 + mod index; 12 + pub use article::Article; 13 + pub use index::Index; 14 + } 10 15 11 16 fn main() -> Result<BuildOutput, Box<dyn std::error::Error>> { 12 17 coronate( 13 - routes![Index, Article], 18 + routes![pages::Index, pages::Article], 14 19 ContentSources(vec![Box::new(ContentSource { 15 20 name: "articles".to_string(), 16 21 entries: glob_markdown::<ArticleContent>("content/articles/*.md"),
+5 -1
examples/blog/src/pages/index.rs
··· 1 1 use maud::html; 2 2 use maudit::page::prelude::*; 3 3 4 - use crate::{content::ArticleContent, layout::layout, Article, ArticleParams}; 4 + use crate::{ 5 + content::ArticleContent, 6 + layout::layout, 7 + pages::{article::ArticleParams, Article}, 8 + }; 5 9 6 10 #[route("/")] 7 11 pub struct Index;
+10 -3
examples/kitchen-sink/src/main.rs
··· 1 - use maudit::{coronate, generate_pages_mod, routes, BuildOptions, BuildOutput}; 1 + use maudit::{coronate, routes, BuildOptions, BuildOutput}; 2 2 3 - generate_pages_mod!(); 3 + mod pages { 4 + mod dynamic; 5 + mod endpoint; 6 + mod index; 7 + pub use dynamic::DynamicExample; 8 + pub use endpoint::Endpoint; 9 + pub use index::Index; 10 + } 4 11 5 12 fn main() -> Result<BuildOutput, Box<dyn std::error::Error>> { 6 13 coronate( 7 - routes![Index, DynamicExample, Endpoint], 14 + routes![pages::Index, pages::DynamicExample, pages::Endpoint], 8 15 vec![].into(), 9 16 BuildOptions::default(), 10 17 )