diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/app_state.rs | 27 | ||||
| -rw-r--r-- | src/exercise.rs | 1 | ||||
| -rw-r--r-- | src/main.rs | 6 |
3 files changed, 21 insertions, 13 deletions
diff --git a/src/app_state.rs b/src/app_state.rs index cb7debe..2ea3db4 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -51,24 +51,29 @@ impl StateFile { } } +#[must_use] +pub enum ExercisesProgress { + AllDone, + Pending, +} + pub struct AppState { state_file: StateFile, exercises: &'static [Exercise], n_done: u16, current_exercise: &'static Exercise, -} - -#[must_use] -pub enum ExercisesProgress { - AllDone, - Pending, + final_message: &'static str, } impl AppState { - pub fn new(exercises: Vec<Exercise>) -> Self { - // Leaking for sending the exercises to the debounce event handler. - // Leaking is not a problem since the exercises' slice is used until the end of the program. + pub fn new(mut exercises: Vec<Exercise>, mut final_message: String) -> Self { + // Leaking especially for sending the exercises to the debounce event handler. + // Leaking is not a problem because the `AppState` instance lives until + // the end of the program. + exercises.shrink_to_fit(); let exercises = exercises.leak(); + final_message.shrink_to_fit(); + let final_message = final_message.leak(); let state_file = StateFile::read_or_default(exercises); let n_done = state_file @@ -82,6 +87,7 @@ impl AppState { exercises, n_done, current_exercise, + final_message, } } @@ -210,7 +216,8 @@ impl AppState { writer.execute(Clear(ClearType::All))?; writer.write_all(FENISH_LINE.as_bytes())?; - // TODO: Show final message. + writer.write_all(self.final_message.as_bytes())?; + writer.write_all(b"\n")?; return Ok(ExercisesProgress::AllDone); }; diff --git a/src/exercise.rs b/src/exercise.rs index a9dcce3..a29b83a 100644 --- a/src/exercise.rs +++ b/src/exercise.rs @@ -26,7 +26,6 @@ pub enum Mode { pub struct InfoFile { // TODO pub welcome_message: Option<String>, - // TODO pub final_message: Option<String>, pub exercises: Vec<Exercise>, } diff --git a/src/main.rs b/src/main.rs index fdbb710..cdfa21f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,7 +68,7 @@ fn main() -> Result<()> { exit(1); } - let mut app_state = AppState::new(exercises); + let mut app_state = AppState::new(exercises, info_file.final_message.unwrap_or_default()); match args.command { None => loop { @@ -144,4 +144,6 @@ const FENISH_LINE: &str = "+---------------------------------------------------- ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ - ▒▒ ▒▒ ▒▒ ▒▒\x1b[0m"; + ▒▒ ▒▒ ▒▒ ▒▒\x1b[0m + +"; |
