use async_std::task::sleep;
use futures::join;
use std::fmt::Write;
use std::time::Duration;
use tracing::{subscriber, Level};
use tracing_appender::{non_blocking, rolling::never};
use tracing_subscriber::fmt;
#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let file = never("./", "minus.log");
let (non_block, _guard) = non_blocking(file);
let subscriber = fmt()
.with_writer(non_block)
.with_max_level(Level::INFO)
.compact()
.finish();
subscriber::set_global_default(subscriber).unwrap();
let output = minus::Pager::new().finish();
let increment = async {
for i in 0..=30_u32 {
let mut output = output.lock().await;
writeln!(output.lines, "{}", i)?;
drop(output);
sleep(Duration::from_millis(100)).await;
}
Result::<_, std::fmt::Error>::Ok(())
};
let (res1, res2) = join!(minus::async_std_updating(output.clone()), increment);
res1?;
res2?;
Ok(())
}