summaryrefslogtreecommitdiff
path: root/src/watch/state.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-25 01:56:01 +0200
committermo8it <mo8it@proton.me>2024-04-25 01:56:01 +0200
commit67fa01774223b08833c21baeb13bdec9e4a298a0 (patch)
tree1892075e96fb9bb39272ae0e4e0a4b572197035d /src/watch/state.rs
parentd8c2ab8349854cbc7f4a994c7413d266cc38bc24 (diff)
Use os_pipe
Diffstat (limited to 'src/watch/state.rs')
-rw-r--r--src/watch/state.rs26
1 files changed, 6 insertions, 20 deletions
diff --git a/src/watch/state.rs b/src/watch/state.rs
index 5f4abf3..df492dc 100644
--- a/src/watch/state.rs
+++ b/src/watch/state.rs
@@ -8,6 +8,7 @@ use std::io::{self, StdoutLock, Write};
use crate::{
app_state::{AppState, ExercisesProgress},
+ exercise::OUTPUT_CAPACITY,
progress_bar::progress_bar,
terminal_link::TerminalFileLink,
};
@@ -21,8 +22,7 @@ enum DoneStatus {
pub struct WatchState<'a> {
writer: StdoutLock<'a>,
app_state: &'a mut AppState,
- stdout: Option<Vec<u8>>,
- stderr: Option<Vec<u8>>,
+ output: Vec<u8>,
show_hint: bool,
done_status: DoneStatus,
manual_run: bool,
@@ -35,8 +35,7 @@ impl<'a> WatchState<'a> {
Self {
writer,
app_state,
- stdout: None,
- stderr: None,
+ output: Vec::with_capacity(OUTPUT_CAPACITY),
show_hint: false,
done_status: DoneStatus::Pending,
manual_run,
@@ -51,11 +50,8 @@ impl<'a> WatchState<'a> {
pub fn run_current_exercise(&mut self) -> Result<()> {
self.show_hint = false;
- let output = self.app_state.current_exercise().run()?;
- self.stdout = Some(output.stdout);
-
- if output.status.success() {
- self.stderr = None;
+ let success = self.app_state.current_exercise().run(&mut self.output)?;
+ if success {
self.done_status =
if let Some(solution_path) = self.app_state.current_solution_path()? {
DoneStatus::DoneWithSolution(solution_path)
@@ -66,7 +62,6 @@ impl<'a> WatchState<'a> {
self.app_state
.set_pending(self.app_state.current_exercise_ind())?;
- self.stderr = Some(output.stderr);
self.done_status = DoneStatus::Pending;
}
@@ -116,16 +111,7 @@ impl<'a> WatchState<'a> {
self.writer.execute(Clear(ClearType::All))?;
- if let Some(stdout) = &self.stdout {
- self.writer.write_all(stdout)?;
- self.writer.write_all(b"\n")?;
- }
-
- if let Some(stderr) = &self.stderr {
- self.writer.write_all(stderr)?;
- self.writer.write_all(b"\n")?;
- }
-
+ self.writer.write_all(&self.output)?;
self.writer.write_all(b"\n")?;
if self.show_hint {