use async_std::io::prelude::*;
use futures::future::join;
use std::env::args;
async fn read_file(
name: String,
pager: minus::PagerMutex,
) -> Result<(), Box<dyn std::error::Error>> {
let file = async_std::fs::File::open(name).await?;
let changes = async {
let mut buff = String::new();
let mut buf_reader = async_std::io::BufReader::new(file);
buf_reader.read_to_string(&mut buff).await?;
let mut guard = pager.lock().await;
guard.push_str(buff);
std::io::Result::<_>::Ok(())
};
let (res1, res2) = join(minus::async_std_updating(pager.clone()), changes).await;
res1?;
res2?;
Ok(())
}
#[async_std::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let arguments: Vec<String> = args().collect();
if arguments.len() < 2 {
panic!("Not enough arguments");
}
let filename = arguments[1].clone();
let mut output = minus::Pager::new().unwrap();
output.set_prompt(&filename);
read_file(filename, output.finish()).await
}