mirror of
https://github.com/rust-lang/rustlings
synced 2024-11-14 16:37:14 +00:00
Use the embedded info.toml in debug mode
This commit is contained in:
parent
e4ee2cd548
commit
ef02c6c6ab
1 changed files with 20 additions and 9 deletions
|
@ -1,6 +1,8 @@
|
|||
use anyhow::{bail, Context, Error, Result};
|
||||
use serde::Deserialize;
|
||||
use std::fs;
|
||||
use std::{fs, io::ErrorKind};
|
||||
|
||||
use crate::DEBUG_PROFILE;
|
||||
|
||||
// The mode of the exercise.
|
||||
#[derive(Deserialize, Copy, Clone)]
|
||||
|
@ -46,18 +48,27 @@ pub struct InfoFile {
|
|||
}
|
||||
|
||||
impl InfoFile {
|
||||
fn from_embedded() -> Result<Self> {
|
||||
toml_edit::de::from_str(include_str!("../info.toml"))
|
||||
.context("Failed to parse the embedded `info.toml` file")
|
||||
}
|
||||
|
||||
pub fn parse() -> Result<Self> {
|
||||
if DEBUG_PROFILE {
|
||||
return Self::from_embedded();
|
||||
}
|
||||
|
||||
// Read a local `info.toml` if it exists.
|
||||
let slf: Self = match fs::read_to_string("info.toml") {
|
||||
Ok(file_content) => toml_edit::de::from_str(&file_content)
|
||||
let slf = match fs::read_to_string("info.toml") {
|
||||
Ok(file_content) => toml_edit::de::from_str::<Self>(&file_content)
|
||||
.context("Failed to parse the `info.toml` file")?,
|
||||
Err(e) => match e.kind() {
|
||||
std::io::ErrorKind::NotFound => {
|
||||
toml_edit::de::from_str(include_str!("../info.toml"))
|
||||
.context("Failed to parse the embedded `info.toml` file")?
|
||||
Err(e) => {
|
||||
if e.kind() == ErrorKind::NotFound {
|
||||
return Self::from_embedded();
|
||||
}
|
||||
_ => return Err(Error::from(e).context("Failed to read the `info.toml` file")),
|
||||
},
|
||||
|
||||
return Err(Error::from(e).context("Failed to read the `info.toml` file"));
|
||||
}
|
||||
};
|
||||
|
||||
if slf.exercises.is_empty() {
|
||||
|
|
Loading…
Reference in a new issue