use crate::{ast::Call, BlockId, Example, ShellError, Signature, Value}; use super::EvaluationContext; pub trait Command { fn name(&self) -> &str; fn signature(&self) -> Signature { Signature::new(self.name()).desc(self.usage()).filter() } fn usage(&self) -> &str; fn extra_usage(&self) -> &str { "" } fn run( &self, context: &EvaluationContext, call: &Call, input: Value, ) -> Result; fn is_binary(&self) -> bool { false } // Commands that are not meant to be run by users fn is_private(&self) -> bool { false } fn examples(&self) -> Vec { Vec::new() } // This is a built-in command fn is_builtin(&self) -> bool { true } // Is a sub command fn is_sub(&self) -> bool { self.name().contains(' ') } // Is a plugin command fn is_plugin(&self) -> bool { false } // If command is a block i.e. def blah [] { }, get the block id fn get_block_id(&self) -> Option { None } }