nui 0.0.1

Experimental neovim RPC for UI clients
Documentation
extern crate neovim;

use futures::StreamExt;
use neovim::{nvim, Value};
use std::process::Stdio;
use tokio::process::Command;

#[tokio::main]
async fn main() {
    let mut child = Command::new("/opt/homebrew/bin/nvim")
        .arg("--embed")
        .arg("--clean")
        .arg("-u")
        .arg("/Users/lucas/Projects/rust-neovim-ui/neovim/examples/simple.lua")
        .arg("/Users/lucas/Projects/rust-neovim-ui/neovim/examples/simple.lua")
        .stdin(Stdio::piped())
        .stdout(Stdio::piped())
        .spawn()
        .unwrap();
    let stdout = child.stdout.take().unwrap();
    let stdin = child.stdin.take().unwrap();

    let handler = tokio::spawn({
        let mut n = nvim::Nvim::new(stdout, stdin);

        n.request(
            "nvim_ui_attach",
            vec![Value::from(200), Value::from(200), Value::Map(vec![])],
        )
        .await;

        async move {
            while let Some(m) = n.next().await {
                match m {
                    neovim::Message::Request { id, method, params } => {
                        let _ = n.request("nvim_get_api_info", vec![]).await;
                    }
                    neovim::Message::Notification { method, params } => {
                        dbg!(method);
                    }
                    _ => {}
                }
            }
        }
    });

    handler.await.unwrap();
}