use async_std::io::prelude::*;
use futures::future::join;
use std::env::args;
use std::sync::Arc;
async fn read_file(
name: String,
pager: Arc<minus::PagerMutex>,
) -> Result<(), Box<dyn std::error::Error>> {
let file = async_std::fs::File::open(name).await?;
let changes = async {
let mut buf_reader = async_std::io::BufReader::new(file);
let mut guard = pager.lock().await;
buf_reader.read_to_string(&mut guard.lines).await?;
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 output = minus::Pager::new().set_prompt(&filename).finish();
read_file(filename, output).await
}