summaryrefslogtreecommitdiffstats
path: root/src/repl/handler.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-03-09 11:05:42 +0800
committerGitHub <noreply@github.com>2023-03-09 11:05:42 +0800
commitc7eb261abc32ac4d6fc5364244a6246bcdc462d9 (patch)
tree74b41609f9cebc5351ac7798881a3e64bc955c35 /src/repl/handler.rs
parenta62e461e38482ade15c6826e656393d5f867488a (diff)
downloadaichat-c7eb261abc32ac4d6fc5364244a6246bcdc462d9.tar.gz
fix: abort by ctrlc unexpectedly prints error message (#49)
Diffstat (limited to 'src/repl/handler.rs')
-rw-r--r--src/repl/handler.rs19
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 {