summaryrefslogtreecommitdiff
path: root/src/state_file.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state_file.rs')
-rw-r--r--src/state_file.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/state_file.rs b/src/state_file.rs
index ca7ed34..693c78d 100644
--- a/src/state_file.rs
+++ b/src/state_file.rs
@@ -10,9 +10,11 @@ pub struct StateFile {
progress: Vec<bool>,
}
+const BAD_INDEX_ERR: &str = "The next exercise index is higher than the number of exercises";
+
impl StateFile {
fn read(exercises: &[Exercise]) -> Option<Self> {
- let file_content = fs::read(".rustlings.json").ok()?;
+ let file_content = fs::read(".rustlings-state.json").ok()?;
let slf: Self = serde_json::de::from_slice(&file_content).ok()?;
@@ -34,6 +36,8 @@ impl StateFile {
// TODO: Capacity
let mut buf = Vec::with_capacity(1024);
serde_json::ser::to_writer(&mut buf, self).context("Failed to serialize the state")?;
+ fs::write(".rustlings-state.json", buf)
+ .context("Failed to write the state file `.rustlings-state.json`")?;
Ok(())
}
@@ -45,9 +49,8 @@ impl StateFile {
pub fn set_next_exercise_ind(&mut self, ind: usize) -> Result<()> {
if ind >= self.progress.len() {
- bail!("The next exercise index is higher than the number of exercises");
+ bail!(BAD_INDEX_ERR);
}
-
self.next_exercise_ind = ind;
self.write()
}
@@ -56,4 +59,10 @@ impl StateFile {
pub fn progress(&self) -> &[bool] {
&self.progress
}
+
+ pub fn reset(&mut self, ind: usize) -> Result<()> {
+ let done = self.progress.get_mut(ind).context(BAD_INDEX_ERR)?;
+ *done = false;
+ self.write()
+ }
}