From 19b851c71ee8c7499046936771446e6ae6e60c16 Mon Sep 17 00:00:00 2001 From: Melody Horn / boringcactus Date: Sun, 13 Jun 2021 21:05:56 -0600 Subject: finish passing the tutorial 1 tests --- src/bin/tosin-admin.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src') diff --git a/src/bin/tosin-admin.rs b/src/bin/tosin-admin.rs index 3eb57a1..6408337 100644 --- a/src/bin/tosin-admin.rs +++ b/src/bin/tosin-admin.rs @@ -1,6 +1,7 @@ use std::env::set_current_dir; use std::fs; use std::io::Write as _; +use std::path::Path; use std::process::Command; use structopt::StructOpt; @@ -26,11 +27,37 @@ fn settings() -> Settings { tosin::main!(urls(), settings()); "#; +const APP_MOD: &str = r#" +pub mod urls; +pub mod views; + +pub use urls::urls; +"#; +const APP_URLS: &str = r#" +use tosin::urls::{UrlMap, url_map}; + +use super::views; + +pub fn urls() -> UrlMap { + todo!("fill in URL map") +} +"#; +const APP_VIEWS: &str = r#" +use tosin::http::{Reply, Response}; + +todo!("write some views"); +"#; + #[derive(StructOpt, Debug)] enum Opt { /// Start a new project/site (can contain multiple apps) StartProject { name: Option, + }, + + /// Start a new app + StartApp { + name: String, } } @@ -66,5 +93,17 @@ fn main() { } } } + Opt::StartApp { name } => { + // TODO make this more robust + if fs::metadata("Cargo.toml").is_ok() { + let app_folder = Path::new("src").join(name); + fs::create_dir(&app_folder).unwrap(); + fs::write(app_folder.join("mod.rs"), APP_MOD).unwrap(); + fs::write(app_folder.join("urls.rs"), APP_URLS).unwrap(); + fs::write(app_folder.join("views.rs"), APP_VIEWS).unwrap(); + } else { + todo!("new standalone app crate maybe??") + } + } } } -- cgit v1.2.3