summaryrefslogtreecommitdiff
path: root/src/app_state.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-24 02:52:30 +0200
committermo8it <mo8it@proton.me>2024-04-24 02:52:30 +0200
commit8a085a0a85c759029cd57c28364867bde817e738 (patch)
treeb45b6f11597130690232b2eaa9621f25ecf98200 /src/app_state.rs
parentedf57626129467dacc0c6f04b2ca00e64d5b2245 (diff)
Dump solution and show its path
Diffstat (limited to 'src/app_state.rs')
-rw-r--r--src/app_state.rs45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/app_state.rs b/src/app_state.rs
index 6f393bc..33d3de2 100644
--- a/src/app_state.rs
+++ b/src/app_state.rs
@@ -257,21 +257,46 @@ impl AppState {
}
}
- pub fn done_current_exercise(&mut self, writer: &mut StdoutLock) -> Result<ExercisesProgress> {
- let exercise = &mut self.exercises[self.current_exercise_ind];
- if !exercise.done {
- exercise.done = true;
- self.n_done += 1;
+ pub fn current_solution_path(&self) -> Result<Option<String>> {
+ if DEBUG_PROFILE {
+ return Ok(None);
}
- if self.official_exercises && !DEBUG_PROFILE {
+ let current_exercise = self.current_exercise();
+
+ if self.official_exercises {
+ let dir_name = current_exercise
+ .dir
+ .context("Official exercises must be nested in the `exercises` directory")?;
+ let solution_path = format!("solutions/{dir_name}/{}.rs", current_exercise.name);
+
EMBEDDED_FILES.write_solution_to_disk(
self.current_exercise_ind,
- exercise
- .dir
- .context("Official exercises must be nested in the `exercises` directory")?,
- exercise.name,
+ dir_name,
+ &solution_path,
)?;
+
+ Ok(Some(solution_path))
+ } else {
+ let solution_path = if let Some(dir) = current_exercise.dir {
+ format!("solutions/{dir}/{}.rs", current_exercise.name)
+ } else {
+ format!("solutions/{}.rs", current_exercise.name)
+ };
+
+ if Path::new(&solution_path).exists() {
+ return Ok(Some(solution_path));
+ }
+
+ Ok(None)
+ }
+ }
+
+ pub fn done_current_exercise(&mut self, writer: &mut StdoutLock) -> Result<ExercisesProgress> {
+ let exercise = &mut self.exercises[self.current_exercise_ind];
+ if !exercise.done {
+ exercise.done = true;
+ self.n_done += 1;
}
let Some(ind) = self.next_pending_exercise_ind() else {