1
0
mirror of https://github.com/rust-lang/rustlings.git synced 2024-11-08 09:09:17 +01:00

Scetch the dev subcommand

This commit is contained in:
mo8it 2024-04-15 23:54:57 +02:00
parent f5eaa578b9
commit 7ebc260924
4 changed files with 39 additions and 12 deletions

20
src/dev.rs Normal file

@ -0,0 +1,20 @@
use anyhow::Result;
use clap::Subcommand;
mod check;
mod init;
#[derive(Subcommand)]
pub enum DevCommands {
Init,
Check,
}
impl DevCommands {
pub fn run(self) -> Result<()> {
match self {
DevCommands::Init => init::init(),
DevCommands::Check => check::check(),
}
}
}

5
src/dev/check.rs Normal file

@ -0,0 +1,5 @@
use anyhow::Result;
pub fn check() -> Result<()> {
todo!()
}

5
src/dev/init.rs Normal file

@ -0,0 +1,5 @@
use anyhow::Result;
pub fn init() -> Result<()> {
todo!()
}

@ -12,6 +12,7 @@ use std::{
}; };
mod app_state; mod app_state;
mod dev;
mod embedded; mod embedded;
mod exercise; mod exercise;
mod info_file; mod info_file;
@ -21,14 +22,7 @@ mod progress_bar;
mod run; mod run;
mod watch; mod watch;
use self::{ use self::{app_state::AppState, dev::DevCommands, info_file::InfoFile, watch::WatchExit};
app_state::AppState,
info_file::InfoFile,
init::init,
list::list,
run::run,
watch::{watch, WatchExit},
};
/// Rustlings is a collection of small exercises to get you used to writing and reading Rust code /// Rustlings is a collection of small exercises to get you used to writing and reading Rust code
#[derive(Parser)] #[derive(Parser)]
@ -61,6 +55,8 @@ enum Subcommands {
/// The name of the exercise /// The name of the exercise
name: String, name: String,
}, },
#[command(subcommand)]
Dev(DevCommands),
} }
fn main() -> Result<()> { fn main() -> Result<()> {
@ -71,7 +67,7 @@ fn main() -> Result<()> {
let info_file = InfoFile::parse()?; let info_file = InfoFile::parse()?;
if matches!(args.command, Some(Subcommands::Init)) { if matches!(args.command, Some(Subcommands::Init)) {
init(&info_file.exercises).context("Initialization failed")?; init::init(&info_file.exercises).context("Initialization failed")?;
println!("{POST_INIT_MSG}"); println!("{POST_INIT_MSG}");
return Ok(()); return Ok(());
} }
@ -122,12 +118,12 @@ fn main() -> Result<()> {
}; };
loop { loop {
match watch(&mut app_state, notify_exercise_paths)? { match watch::watch(&mut app_state, notify_exercise_paths)? {
WatchExit::Shutdown => break, WatchExit::Shutdown => break,
// It is much easier to exit the watch mode, launch the list mode and then restart // It is much easier to exit the watch mode, launch the list mode and then restart
// the watch mode instead of trying to pause the watch threads and correct the // the watch mode instead of trying to pause the watch threads and correct the
// watch state. // watch state.
WatchExit::List => list(&mut app_state)?, WatchExit::List => list::list(&mut app_state)?,
} }
} }
} }
@ -137,7 +133,7 @@ fn main() -> Result<()> {
if let Some(name) = name { if let Some(name) = name {
app_state.set_current_exercise_by_name(&name)?; app_state.set_current_exercise_by_name(&name)?;
} }
run(&mut app_state)?; run::run(&mut app_state)?;
} }
Some(Subcommands::Reset { name }) => { Some(Subcommands::Reset { name }) => {
app_state.set_current_exercise_by_name(&name)?; app_state.set_current_exercise_by_name(&name)?;
@ -150,6 +146,7 @@ fn main() -> Result<()> {
app_state.set_current_exercise_by_name(&name)?; app_state.set_current_exercise_by_name(&name)?;
println!("{}", app_state.current_exercise().hint); println!("{}", app_state.current_exercise().hint);
} }
Some(Subcommands::Dev(dev_command)) => dev_command.run()?,
} }
Ok(()) Ok(())