Skip to main content

CommandDef

Struct CommandDef 

Source
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: String

Canonical 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.

§hidden: bool

Whether the command should be hidden from generated discovery output.

§sort_key: Option<String>

Optional presentation key used to order sibling commands.

§policy: CommandPolicyDef

Policy 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

Source

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");
Source

pub fn about(self, about: impl Into<String>) -> Self

Sets the short help text and returns the updated definition.

Source

pub fn long_about(self, long_about: impl Into<String>) -> Self

Sets the long help text and returns the updated definition.

Source

pub fn usage(self, usage: impl Into<String>) -> Self

Sets the explicit usage line and returns the updated definition.

Source

pub fn before_help(self, text: impl Into<String>) -> Self

Sets text shown before generated help output.

Source

pub fn after_help(self, text: impl Into<String>) -> Self

Sets text shown after generated help output.

Source

pub fn alias(self, alias: impl Into<String>) -> Self

Appends a visible alias and returns the updated definition.

Source

pub fn aliases( self, aliases: impl IntoIterator<Item = impl Into<String>>, ) -> Self

Appends multiple visible aliases and returns the updated definition.

Source

pub fn hidden(self) -> Self

Marks the command as hidden from generated help and discovery output.

Source

pub fn sort(self, sort_key: impl Into<String>) -> Self

Sets a sort key used when presenting the command alongside peers.

Source

pub fn policy(self, policy: CommandPolicyDef) -> Self

Replaces the command policy metadata.

Source

pub fn arg(self, arg: ArgDef) -> Self

Appends a positional argument definition.

Source

pub fn args(self, args: impl IntoIterator<Item = ArgDef>) -> Self

Appends multiple positional argument definitions.

Source

pub fn flag(self, flag: FlagDef) -> Self

Appends a flag definition.

Source

pub fn flags(self, flags: impl IntoIterator<Item = FlagDef>) -> Self

Appends multiple flag definitions.

Source

pub fn subcommand(self, subcommand: CommandDef) -> Self

Appends a nested subcommand definition.

Source

pub fn subcommands( self, subcommands: impl IntoIterator<Item = CommandDef>, ) -> Self

Appends multiple nested subcommand definitions.

Source§

impl CommandDef

Source

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

Source§

fn clone(&self) -> CommandDef

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CommandDef

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CommandDef

Source§

fn default() -> CommandDef

Returns the “default value” for a type. Read more
Source§

impl From<&CommandDef> for DescribeCommandV1

Source§

fn from(command: &CommandDef) -> Self

Converts to this type from the input type.
Source§

impl From<&DescribeCommandV1> for CommandDef

Source§

fn from(command: &DescribeCommandV1) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for CommandDef

Source§

fn eq(&self, other: &CommandDef) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for CommandDef

Source§

impl StructuralPartialEq for CommandDef

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Returns a reference to the value as Any
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Returns a mutable reference to the value as Any
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> QuoteExt for T
where T: ?Sized,

Source§

fn push_quoted<'q, Q, S>(&mut self, _q: Q, s: S)
where Q: QuoteInto<T>, S: Into<Quotable<'q>>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryClone for T
where T: Clone,

Source§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more