pub struct CommandDef {Show 13 fields
pub name: String,
pub about: Option<String>,
pub long_about: Option<String>,
pub usage: Option<String>,
pub before_help: Option<String>,
pub after_help: Option<String>,
pub aliases: Vec<String>,
pub hidden: bool,
pub sort_key: Option<String>,
pub policy: CommandPolicyDef,
pub args: Vec<ArgDef>,
pub flags: Vec<FlagDef>,
pub subcommands: Vec<CommandDef>,
}Expand description
Declarative command description used for help, completion, and plugin metadata.
Fields§
§name: StringCanonical command name shown in the command path.
about: Option<String>Short summary used in compact help output.
long_about: Option<String>Expanded description used in detailed help output.
usage: Option<String>Explicit usage line when generated usage should be overridden.
before_help: Option<String>Text inserted before generated help content.
after_help: Option<String>Text appended after generated help content.
aliases: Vec<String>Alternate visible names accepted for the command.
Whether the command should be hidden from generated discovery output.
sort_key: Option<String>Optional presentation key used to order sibling commands.
policy: CommandPolicyDefPolicy metadata that controls command visibility and availability.
args: Vec<ArgDef>Positional arguments accepted by the command.
flags: Vec<FlagDef>Flags and options accepted by the command.
subcommands: Vec<CommandDef>Nested subcommands exposed below this command.
Implementations§
Source§impl CommandDef
impl CommandDef
Sourcepub fn new(name: impl Into<String>) -> Self
pub fn new(name: impl Into<String>) -> Self
Creates a command definition with the provided command name.
§Examples
use osp_cli::core::command_def::{
ArgDef, CommandDef, CommandPolicyDef, FlagDef, ValueChoice, ValueKind,
};
use osp_cli::core::command_policy::VisibilityMode;
let policy = CommandPolicyDef {
visibility: VisibilityMode::Authenticated,
required_capabilities: vec!["plugins.write".to_string()],
feature_flags: vec!["beta".to_string()],
};
let command = CommandDef::new("theme")
.about("Inspect themes")
.long_about("Long theme help")
.usage("osp theme [OPTIONS] [name]")
.before_help("before text")
.after_help("after text")
.alias("skin")
.aliases(["palette"])
.sort("10")
.policy(policy.clone())
.arg(
ArgDef::new("name")
.help("Theme name")
.value_kind(ValueKind::Enum)
.choices([
ValueChoice::new("dracula"),
ValueChoice::new("tokyonight"),
]),
)
.flag(FlagDef::new("raw").long("raw").help("Show raw values"))
.subcommand(CommandDef::new("list").about("List available themes"));
assert_eq!(command.name, "theme");
assert_eq!(command.long_about.as_deref(), Some("Long theme help"));
assert_eq!(command.usage.as_deref(), Some("osp theme [OPTIONS] [name]"));
assert_eq!(command.before_help.as_deref(), Some("before text"));
assert_eq!(command.after_help.as_deref(), Some("after text"));
assert_eq!(command.aliases, vec!["skin".to_string(), "palette".to_string()]);
assert_eq!(command.sort_key.as_deref(), Some("10"));
assert_eq!(command.policy, policy);
assert_eq!(command.args[0].choices.len(), 2);
assert_eq!(command.flags[0].long.as_deref(), Some("raw"));
assert_eq!(command.subcommands[0].name, "list");Sourcepub fn about(self, about: impl Into<String>) -> Self
pub fn about(self, about: impl Into<String>) -> Self
Sets the short help text and returns the updated definition.
Sourcepub fn long_about(self, long_about: impl Into<String>) -> Self
pub fn long_about(self, long_about: impl Into<String>) -> Self
Sets the long help text and returns the updated definition.
Sourcepub fn usage(self, usage: impl Into<String>) -> Self
pub fn usage(self, usage: impl Into<String>) -> Self
Sets the explicit usage line and returns the updated definition.
Sourcepub fn before_help(self, text: impl Into<String>) -> Self
pub fn before_help(self, text: impl Into<String>) -> Self
Sets text shown before generated help output.
Sourcepub fn after_help(self, text: impl Into<String>) -> Self
pub fn after_help(self, text: impl Into<String>) -> Self
Sets text shown after generated help output.
Sourcepub fn alias(self, alias: impl Into<String>) -> Self
pub fn alias(self, alias: impl Into<String>) -> Self
Appends a visible alias and returns the updated definition.
Sourcepub fn aliases(
self,
aliases: impl IntoIterator<Item = impl Into<String>>,
) -> Self
pub fn aliases( self, aliases: impl IntoIterator<Item = impl Into<String>>, ) -> Self
Appends multiple visible aliases and returns the updated definition.
Marks the command as hidden from generated help and discovery output.
Sourcepub fn sort(self, sort_key: impl Into<String>) -> Self
pub fn sort(self, sort_key: impl Into<String>) -> Self
Sets a sort key used when presenting the command alongside peers.
Sourcepub fn policy(self, policy: CommandPolicyDef) -> Self
pub fn policy(self, policy: CommandPolicyDef) -> Self
Replaces the command policy metadata.
Sourcepub fn args(self, args: impl IntoIterator<Item = ArgDef>) -> Self
pub fn args(self, args: impl IntoIterator<Item = ArgDef>) -> Self
Appends multiple positional argument definitions.
Sourcepub fn flags(self, flags: impl IntoIterator<Item = FlagDef>) -> Self
pub fn flags(self, flags: impl IntoIterator<Item = FlagDef>) -> Self
Appends multiple flag definitions.
Sourcepub fn subcommand(self, subcommand: CommandDef) -> Self
pub fn subcommand(self, subcommand: CommandDef) -> Self
Appends a nested subcommand definition.
Sourcepub fn subcommands(
self,
subcommands: impl IntoIterator<Item = CommandDef>,
) -> Self
pub fn subcommands( self, subcommands: impl IntoIterator<Item = CommandDef>, ) -> Self
Appends multiple nested subcommand definitions.
Source§impl CommandDef
impl CommandDef
Sourcepub fn from_clap(command: Command) -> Self
pub fn from_clap(command: Command) -> Self
Converts a clap command tree into a CommandDef tree.
Only available with the clap cargo feature, which is enabled by
default.
§Examples
use clap::Command;
use osp_cli::core::command_def::CommandDef;
let command = CommandDef::from_clap(
Command::new("ldap").about("Directory lookups"),
);
assert_eq!(command.name, "ldap");
assert_eq!(command.about.as_deref(), Some("Directory lookups"));Trait Implementations§
Source§impl Clone for CommandDef
impl Clone for CommandDef
Source§fn clone(&self) -> CommandDef
fn clone(&self) -> CommandDef
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CommandDef
impl Debug for CommandDef
Source§impl Default for CommandDef
impl Default for CommandDef
Source§fn default() -> CommandDef
fn default() -> CommandDef
Source§impl From<&CommandDef> for DescribeCommandV1
impl From<&CommandDef> for DescribeCommandV1
Source§fn from(command: &CommandDef) -> Self
fn from(command: &CommandDef) -> Self
Source§impl From<&DescribeCommandV1> for CommandDef
impl From<&DescribeCommandV1> for CommandDef
Source§fn from(command: &DescribeCommandV1) -> Self
fn from(command: &DescribeCommandV1) -> Self
Source§impl PartialEq for CommandDef
impl PartialEq for CommandDef
impl Eq for CommandDef
impl StructuralPartialEq for CommandDef
Auto Trait Implementations§
impl Freeze for CommandDef
impl RefUnwindSafe for CommandDef
impl Send for CommandDef
impl Sync for CommandDef
impl Unpin for CommandDef
impl UnsafeUnpin for CommandDef
impl UnwindSafe for CommandDef
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more