mirror of
https://github.com/notohh/rustlings.git
synced 2024-11-21 05:32:22 -05:00
Add the format version
This commit is contained in:
parent
7ebc260924
commit
92777c0a44
3 changed files with 15 additions and 1 deletions
|
@ -1,3 +1,5 @@
|
|||
format_version = 1
|
||||
|
||||
welcome_message = """Is this your first time? Don't worry, Rustlings was made for beginners! We are
|
||||
going to teach you a lot of things about Rust, but before we can get
|
||||
started, here's a couple of notes about how Rustlings operates:
|
||||
|
|
|
@ -39,6 +39,7 @@ impl ExerciseInfo {
|
|||
|
||||
#[derive(Deserialize)]
|
||||
pub struct InfoFile {
|
||||
pub format_version: u8,
|
||||
pub welcome_message: Option<String>,
|
||||
pub final_message: Option<String>,
|
||||
pub exercises: Vec<ExerciseInfo>,
|
||||
|
|
13
src/main.rs
13
src/main.rs
|
@ -1,4 +1,4 @@
|
|||
use anyhow::{Context, Result};
|
||||
use anyhow::{bail, Context, Result};
|
||||
use app_state::StateFileStatus;
|
||||
use clap::{Parser, Subcommand};
|
||||
use crossterm::{
|
||||
|
@ -24,6 +24,8 @@ mod watch;
|
|||
|
||||
use self::{app_state::AppState, dev::DevCommands, info_file::InfoFile, watch::WatchExit};
|
||||
|
||||
const CURRENT_FORMAT_VERSION: u8 = 1;
|
||||
|
||||
/// Rustlings is a collection of small exercises to get you used to writing and reading Rust code
|
||||
#[derive(Parser)]
|
||||
#[command(version)]
|
||||
|
@ -66,6 +68,10 @@ fn main() -> Result<()> {
|
|||
|
||||
let info_file = InfoFile::parse()?;
|
||||
|
||||
if info_file.format_version > CURRENT_FORMAT_VERSION {
|
||||
bail!(FORMAT_VERSION_HIGHER_ERR);
|
||||
}
|
||||
|
||||
if matches!(args.command, Some(Subcommands::Init)) {
|
||||
init::init(&info_file.exercises).context("Initialization failed")?;
|
||||
println!("{POST_INIT_MSG}");
|
||||
|
@ -156,6 +162,11 @@ const CARGO_NOT_FOUND_ERR: &str = "Failed to find `cargo`.
|
|||
Did you already install Rust?
|
||||
Try running `cargo --version` to diagnose the problem.";
|
||||
|
||||
const FORMAT_VERSION_HIGHER_ERR: &str =
|
||||
"The format version specified in the `info.toml` file is higher than the last one supported.
|
||||
It is possible that you have an outdated version of Rustlings.
|
||||
Try to install the latest Rustlings version first.";
|
||||
|
||||
const POST_INIT_MSG: &str = "Done initialization!
|
||||
|
||||
Run `cd rustlings` to go into the generated directory.
|
||||
|
|
Loading…
Reference in a new issue