use anyhow::bail; use mlua::{Table, Value}; use tokio::sync::oneshot; use yazi_shared::event::Exec; use crate::ValueSendable; pub struct Opt { pub name: String, pub sync: bool, pub data: OptData, } #[derive(Default)] pub struct OptData { pub args: Vec, pub cb: Option mlua::Result + Send>>, pub tx: Option>, } impl TryFrom<&Exec> for Opt { type Error = anyhow::Error; fn try_from(e: &Exec) -> Result { let Some(name) = e.args.first().filter(|s| !s.is_empty()) else { bail!("invalid plugin name"); }; Ok(Self { name: name.to_owned(), sync: e.named.contains_key("sync"), data: e.take_data().unwrap_or_default(), }) } }