diff options
| author | mo8it <mo8it@proton.me> | 2024-04-30 01:39:31 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-04-30 01:39:31 +0200 |
| commit | fef66b80ad0b90d7bbc6ebe704f34816a4b3173a (patch) | |
| tree | c08b4c9a02b5f1e2c9d2b1f118a2debcd89050d1 /src/exercise.rs | |
| parent | b6f40f2ec86abc70e7b8548996c948f6c5563f46 (diff) | |
Implement From<ExerciseInfo> for Exercise
Diffstat (limited to 'src/exercise.rs')
| -rw-r--r-- | src/exercise.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/exercise.rs b/src/exercise.rs index b62958b..37d33b7 100644 --- a/src/exercise.rs +++ b/src/exercise.rs @@ -10,6 +10,7 @@ use std::{ use crate::{ cmd::{run_cmd, CargoCmd}, in_official_repo, + info_file::ExerciseInfo, terminal_link::TerminalFileLink, DEBUG_PROFILE, }; @@ -132,6 +133,34 @@ impl Exercise { } } +impl From<ExerciseInfo> for Exercise { + fn from(mut exercise_info: ExerciseInfo) -> Self { + // Leaking to be able to borrow in the watch mode `Table`. + // Leaking is not a problem because the `AppState` instance lives until + // the end of the program. + let path = exercise_info.path().leak(); + + exercise_info.name.shrink_to_fit(); + let name = exercise_info.name.leak(); + let dir = exercise_info.dir.map(|mut dir| { + dir.shrink_to_fit(); + &*dir.leak() + }); + + let hint = exercise_info.hint.trim().to_owned(); + + Exercise { + dir, + name, + path, + test: exercise_info.test, + strict_clippy: exercise_info.strict_clippy, + hint, + done: false, + } + } +} + impl Display for Exercise { fn fmt(&self, f: &mut Formatter) -> fmt::Result { self.path.fmt(f) |
