diff --git a/crates/nu-plugin/src/plugin.rs b/crates/nu-plugin/src/plugin.rs index b10424edbc..86882b613b 100644 --- a/crates/nu-plugin/src/plugin.rs +++ b/crates/nu-plugin/src/plugin.rs @@ -3,21 +3,35 @@ use nu_protocol::{outln, CallInfo, ReturnValue, Signature, Value}; use serde::{Deserialize, Serialize}; use std::io; +/// The `Plugin` trait defines the API which plugins may use to "hook" into nushell. pub trait Plugin { + /// The `config` method is used to configure a plguin's user interface / signature. + /// + /// This is where the "name" of the plugin (ex `fetch`), description, any required/optional fields, and flags + /// can be defined. This information will displayed in nushell when running help fn config(&mut self) -> Result; + /// `begin_filter` is the first method to be called if the `Signature` of the plugin is configured to be filterable. + /// Any setup required for the plugin such as parsing arguments from `CallInfo` or initializing data structures + /// can be done here. The `CallInfo` parameter will contain data configured in the `config` method of the Plugin trait. fn begin_filter(&mut self, _call_info: CallInfo) -> Result, ShellError> { Ok(vec![]) } + /// `filter` is called for every `Value` that is processed by the plugin. + /// This method requires the plugin `Signature` to be configured as filterable. fn filter(&mut self, _input: Value) -> Result, ShellError> { Ok(vec![]) } + /// `end_filter` is the last method to be called by the plugin after all `Value`s are processed by the plugin. + /// This method requires the plugin `Signature` to be configured as filterable. fn end_filter(&mut self) -> Result, ShellError> { Ok(vec![]) } + /// `sink` consumes the `Value`s that are passed in, preventing further processing. + /// This method requires the plugin `Signature` to be configured without filtering. fn sink(&mut self, _call_info: CallInfo, _input: Vec) {} fn quit(&mut self) {}