Skip to main content

CliSpec

Struct CliSpec 

Source
pub struct CliSpec {
    pub schema: String,
    pub name: String,
    pub version: String,
    pub display_name: Option<String>,
    pub build: Option<String>,
    pub about: Option<String>,
    pub shared_arguments: Vec<ArgSpec>,
    pub lifecycle_output: OutputSpec,
    pub exit_codes: Vec<ExitCodeSpec>,
    pub commands: Vec<CommandSpec>,
}
Expand description

Serializable version-one closed-world CLI registry.

Fields§

§schema: String§name: String§version: String§display_name: Option<String>

Human-facing product name, distinct from the binary identity in name.

§build: Option<String>

Opaque build identifier (a git SHA, for example). The core only carries it; what it means is the host’s business.

§about: Option<String>§shared_arguments: Vec<ArgSpec>

Arguments every command accepts, declared once.

Spliced into each command at build time and added to every combination’s optional set, so nothing downstream — resolution, help, --docs — needs to know they were shared. Serialized as their own list so a consumer in another language reads the same declaration rather than N copies.

§lifecycle_output: OutputSpec§exit_codes: Vec<ExitCodeSpec>

Exit codes this CLI returns beyond the 0/1/2 AFDATA defines, rendered into the reference’s exit-code table. Without this the published reference documents only AFDATA’s three, so a tool that also returns, say, a partial-success code ships a document that contradicts its own binary — on exactly the code a caller needs to branch on.

§commands: Vec<CommandSpec>

Implementations§

Source§

impl CliSpec

Source

pub fn new(name: impl Into<String>, version: impl Into<String>) -> Self

Start a cli-spec-v1 registry.

Source

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

Source

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

Source

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

Record an opaque build identifier. Named build_id because build() already compiles the registry.

Source

pub fn lifecycle_output(self, output: OutputSpec) -> Self

Source

pub fn exit_code(self, code: u8, meaning: impl Into<String>) -> Self

Declare an exit code this CLI returns beyond AFDATA’s 0/1/2, so the rendered reference documents what the binary actually does.

Source

pub fn command(self, command: CommandSpec) -> Self

Source

pub fn shared_arg(self, argument: ArgSpec) -> Self

Declare an argument every command accepts, once.

AFDATA already parses --output, --stdout-file and friends at every command; this is the same capability for an argument the application owns, so a --config needed by six commands is written once instead of six times and cannot drift between them.

It does not change where the argument may appear. The command path is still matched against the leading tokens of argv, so tool --config x sub remains an error and tool sub --config x is the accepted form. This is only about declaration, not position — a caller migrating from a parser with interleaved global flags has to move them after the path.

A command with no combinations is skipped: it exists to carry help for its children, accepts nothing itself, and would otherwise fail the build for declaring an argument no combination covers.

Source

pub fn build(self) -> Result<BuiltCliSpec, CliSpecError>

Validate and compile the registry.

Trait Implementations§

Source§

impl Clone for CliSpec

Source§

fn clone(&self) -> CliSpec

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for CliSpec

Source§

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

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

impl<'de> Deserialize<'de> for CliSpec

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for CliSpec

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl Serialize for CliSpec

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for CliSpec

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> 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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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