Use the embedded info.toml in debug mode

This commit is contained in:
mo8it 2024-04-24 00:58:52 +02:00
parent e4ee2cd548
commit ef02c6c6ab

View file

@ -1,6 +1,8 @@
use anyhow::{bail, Context, Error, Result}; use anyhow::{bail, Context, Error, Result};
use serde::Deserialize; use serde::Deserialize;
use std::fs; use std::{fs, io::ErrorKind};
use crate::DEBUG_PROFILE;
// The mode of the exercise. // The mode of the exercise.
#[derive(Deserialize, Copy, Clone)] #[derive(Deserialize, Copy, Clone)]
@ -46,18 +48,27 @@ pub struct InfoFile {
} }
impl InfoFile { impl InfoFile {
pub fn parse() -> Result<Self> { fn from_embedded() -> Result<Self> {
// 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)
.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")) toml_edit::de::from_str(include_str!("../info.toml"))
.context("Failed to parse the embedded `info.toml` file")? .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 = 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) => {
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() { if slf.exercises.is_empty() {