diff options
| author | mo8it <mo8it@proton.me> | 2024-04-24 00:58:52 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-04-24 00:58:52 +0200 |
| commit | ef02c6c6ab93adf64353c13d6f036d1cd4187af0 (patch) | |
| tree | 5bfd9ffec947e05748ce371536a92d4f72c41f21 /src/info_file.rs | |
| parent | e4ee2cd548ded403dd540ab21f97093633a72da6 (diff) | |
Use the embedded info.toml in debug mode
Diffstat (limited to 'src/info_file.rs')
| -rw-r--r-- | src/info_file.rs | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/info_file.rs b/src/info_file.rs index 879609e..f344464 100644 --- a/src/info_file.rs +++ b/src/info_file.rs @@ -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() { |
