pub use crate::prelude::*;
use anyhow::Result;
use clap::Parser;
pub use parse_dir_routes::*;
pub use parse_file_routes::*;
use std::path::PathBuf;
use sweet::prelude::*;
mod parse_dir_routes;
mod parse_file_routes;
#[derive(Debug, Clone, Parser)]
pub struct CollectRoutes {
#[arg(long)]
pub file_router_tokens: Option<String>,
#[arg(long, default_value = "beet::router::DefaultFileRouter")]
pub file_router_ident: String,
#[arg(long, default_value = "src")]
pub src: PathBuf,
#[arg(long, default_value = "routes")]
pub routes_dir: PathBuf,
}
impl Default for CollectRoutes {
fn default() -> Self { clap::Parser::parse_from(&[""]) }
}
impl CollectRoutes {
pub fn routes_dir(&self) -> PathBuf { self.src.join(&self.routes_dir) }
pub fn routes_mod_path(&self) -> PathBuf {
self.routes_dir().join("mod.rs")
}
pub fn build_strings(&self) -> Result<Vec<(PathBuf, String)>> {
let dir_routes = ReadDir {
dirs: true,
recursive: true,
root: true,
..Default::default()
}
.read(self.routes_dir())?
.into_iter()
.map(|path| {
let str = ParseDirRoutes::build_string(self, &path)?;
Ok((path, str))
})
.collect::<Result<Vec<_>>>()?;
Ok(dir_routes)
}
pub fn build_and_write(&self) -> Result<()> {
for (path, data) in self.build_strings()? {
let mod_path = path.join("mod.rs");
FsExt::write(mod_path, &data)?;
}
Ok(())
}
}
#[cfg(test)]
mod test {
}