2024-04-18 05:28:28 -04:00
|
|
|
use anyhow::{bail, Context, Result};
|
2024-04-15 17:54:57 -04:00
|
|
|
use clap::Subcommand;
|
|
|
|
|
2024-04-18 05:28:28 -04:00
|
|
|
use crate::DEVELOPING_OFFICIAL_RUSTLINGS;
|
|
|
|
|
2024-04-15 17:54:57 -04:00
|
|
|
mod check;
|
|
|
|
mod init;
|
2024-04-17 09:55:50 -04:00
|
|
|
mod update;
|
2024-04-15 17:54:57 -04:00
|
|
|
|
|
|
|
#[derive(Subcommand)]
|
|
|
|
pub enum DevCommands {
|
|
|
|
Init,
|
|
|
|
Check,
|
2024-04-17 09:55:50 -04:00
|
|
|
Update,
|
2024-04-15 17:54:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
impl DevCommands {
|
2024-04-17 09:55:50 -04:00
|
|
|
pub fn run(self) -> Result<()> {
|
2024-04-15 17:54:57 -04:00
|
|
|
match self {
|
2024-04-18 05:28:28 -04:00
|
|
|
DevCommands::Init => {
|
|
|
|
if DEVELOPING_OFFICIAL_RUSTLINGS {
|
|
|
|
bail!("Disabled while developing the official Rustlings");
|
|
|
|
}
|
|
|
|
|
|
|
|
init::init().context(INIT_ERR)
|
|
|
|
}
|
2024-04-17 09:55:50 -04:00
|
|
|
DevCommands::Check => check::check(),
|
|
|
|
DevCommands::Update => update::update(),
|
2024-04-15 17:54:57 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-04-15 21:08:45 -04:00
|
|
|
|
|
|
|
const INIT_ERR: &str = "Initialization failed.
|
|
|
|
After resolving the issue, delete the `rustlings` directory (if it was created) and try again";
|