34 lines
997 B
Rust
34 lines
997 B
Rust
mod inquire;
|
|
mod markdown;
|
|
mod stream;
|
|
|
|
pub use inquire::prompt_theme;
|
|
|
|
pub use self::markdown::{MarkdownRender, RenderOptions};
|
|
use self::stream::{markdown_stream, raw_stream};
|
|
|
|
use crate::utils::{AbortSignal, IS_STDOUT_TERMINAL, error_text, pretty_error};
|
|
use crate::{client::SseEvent, config::GlobalConfig};
|
|
|
|
use anyhow::Result;
|
|
use tokio::sync::mpsc::UnboundedReceiver;
|
|
|
|
pub async fn render_stream(
|
|
rx: UnboundedReceiver<SseEvent>,
|
|
config: &GlobalConfig,
|
|
abort_signal: AbortSignal,
|
|
) -> Result<()> {
|
|
let ret = if *IS_STDOUT_TERMINAL && config.read().highlight {
|
|
let render_options = config.read().render_options()?;
|
|
let mut render = MarkdownRender::init(render_options)?;
|
|
markdown_stream(rx, &mut render, &abort_signal).await
|
|
} else {
|
|
raw_stream(rx, &abort_signal).await
|
|
};
|
|
ret.map_err(|err| err.context("Failed to reader stream"))
|
|
}
|
|
|
|
pub fn render_error(err: anyhow::Error) {
|
|
eprintln!("{}", error_text(&pretty_error(&err)));
|
|
}
|