summaryrefslogtreecommitdiff
path: root/src/exercise.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-30 01:39:31 +0200
committermo8it <mo8it@proton.me>2024-04-30 01:39:31 +0200
commitfef66b80ad0b90d7bbc6ebe704f34816a4b3173a (patch)
treec08b4c9a02b5f1e2c9d2b1f118a2debcd89050d1 /src/exercise.rs
parentb6f40f2ec86abc70e7b8548996c948f6c5563f46 (diff)
Implement From<ExerciseInfo> for Exercise
Diffstat (limited to 'src/exercise.rs')
-rw-r--r--src/exercise.rs29
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)