//! Module defining plugins in Rhai. Is exported for use by plugin authors. use crate::stdlib::{any::TypeId, boxed::Box}; use crate::any::Dynamic; use crate::engine::Engine; pub use crate::fn_native::CallableFunction; use crate::result::EvalAltResult; use crate::token::Position; #[cfg(features = "sync")] /// Represents an externally-written plugin for the Rhai interpreter. /// /// This trait should not be used directly. Use the `#[plugin]` procedural attribute instead. pub trait Plugin: Send { fn register_contents(self, engine: &mut Engine); } #[cfg(not(features = "sync"))] /// Represents an externally-written plugin for the Rhai interpreter. /// /// This trait should not be used directly. Use the `#[plugin]` procedural attribute instead. pub trait Plugin: Send + Sync { fn register_contents(self, engine: &mut Engine); } /// Represents a function that is statically defined within a plugin. /// /// This trait should not be used directly. Use the `#[plugin]` procedural attribute instead. pub trait PluginFunction { fn is_method_call(&self) -> bool; fn is_varadic(&self) -> bool; fn call(&self, args: &mut [&mut Dynamic], pos: Position) -> Result>; fn clone_boxed(&self) -> Box; fn input_types(&self) -> Box<[TypeId]>; }