diff options
| author | sigoden <sigoden@gmail.com> | 2023-03-09 11:05:42 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-09 11:05:42 +0800 |
| commit | c7eb261abc32ac4d6fc5364244a6246bcdc462d9 (patch) | |
| tree | 74b41609f9cebc5351ac7798881a3e64bc955c35 /src/repl | |
| parent | a62e461e38482ade15c6826e656393d5f867488a (diff) | |
| download | aichat-c7eb261abc32ac4d6fc5364244a6246bcdc462d9.tar.gz | |
fix: abort by ctrlc unexpectedly prints error message (#49)
Diffstat (limited to 'src/repl')
| -rw-r--r-- | src/repl/handler.rs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/repl/handler.rs b/src/repl/handler.rs index 979fc5e..b5651c3 100644 --- a/src/repl/handler.rs +++ b/src/repl/handler.rs @@ -123,8 +123,10 @@ impl ReplyStreamHandler { pub fn text(&mut self, text: &str) -> Result<()> { match self.sender.as_ref() { Some(tx) => { - tx.send(ReplyStreamEvent::Text(text.to_string())) - .with_context(|| "Failed to send StreamEvent:Text")?; + let ret = tx + .send(ReplyStreamEvent::Text(text.to_string())) + .with_context(|| "Failed to send StreamEvent:Text"); + self.safe_ret(ret)?; } None => { print_now!("{}", text); @@ -137,8 +139,10 @@ impl ReplyStreamHandler { pub fn done(&mut self) -> Result<()> { match self.sender.as_ref() { Some(tx) => { - tx.send(ReplyStreamEvent::Done) - .with_context(|| "Failed to send StreamEvent:Done")?; + let ret = tx + .send(ReplyStreamEvent::Done) + .with_context(|| "Failed to send StreamEvent:Done"); + self.safe_ret(ret)?; } None => { if !self.buffer.ends_with('\n') { @@ -162,6 +166,13 @@ impl ReplyStreamHandler { pub fn get_abort(&self) -> SharedAbortSignal { self.abort.clone() } + + fn safe_ret(&self, ret: Result<()>) -> Result<()> { + if ret.is_err() && self.abort.aborted() { + return Ok(()); + } + ret + } } pub enum ReplyStreamEvent { |
