prax 0.1.1

a web penetration proxy hosted in neovim
Documentation
use nvim_rs::Value;

use super::Neovim;

#[derive(Debug)]
pub enum Event {
    Detail,
    SubmitIntercept,
    DismissDetail,
    Shutdown,
    Chan(u64),
}

#[derive(Clone)]
pub struct Handler {
    chan: tokio::sync::mpsc::Sender<Event>,
}

impl Handler {
    pub fn new(chan: tokio::sync::mpsc::Sender<Event>) -> Self {
        Handler { chan }
    }
}

#[async_trait::async_trait]
impl nvim_rs::Handler for Handler {
    type Writer = super::io::IoConn;

    async fn handle_notify(&self, name: String, args: Vec<Value>, _: Neovim) {
        log::debug!("notify was sent: {name}");
        match name.as_str() {
            "shutdown" => {
                let _ = self.chan.send(Event::Shutdown).await;
            }
            "detail" => {
                let _ = self.chan.send(Event::Detail).await;
            }

            "job_id" => {
                let Some(Value::Integer(i)) = args.first() else {
                    return;
                };

                let Some(i) = i.as_u64() else { return };

                let _ = self.chan.send(Event::Chan(i)).await;
            }

            "dismiss_detail" => {
                let _ = self.chan.send(Event::DismissDetail).await;
            }

            "submit_intercept" => {
                let _ = self.chan.send(Event::SubmitIntercept).await;
            }

            _ => (),
        }
    }
}