#[non_exhaustive]pub struct Xtask<Subcommand = Subcommand>where
Subcommand: Subcommand,{
pub verbosity: Verbosity,
pub subcommand: Option<Subcommand>,
}
Expand description
Command line interface definition for cargo xtask command.
cargo-xtask(1)
cargo-xtask
Rust project automation command
USAGE:
cargo xtask [OPTIONS] [SUBCOMMAND]
OPTIONS:
-h, --help Print help information
-q, --quiet Less output per occurrence
-v, --verbose More output per occurrence
SUBCOMMANDS:
build `cargo build` with options useful for testing and continuous
integration
clippy `cargo clippy` with options useful for tesing and continuous
integration
dist Build the artifacs and create the archive file for distribution
dist-archive Create the archive file for distribution
dist-build Build all artifacts for distribution
dist-build-bin Build the release binaries for distribution
dist-build-completion Build the shell completion files for distribution
dist-build-doc Build the documentation for distribution
dist-build-license Build the license files for distribution
dist-build-man Build the man pages for distribution
dist-build-readme Build the readme files for distribution
dist-clean Remove the artifacts and archives for distribution
doc `cargo doc` with options useful for testing and continuous
integration
docsrs `cargo doc` with docs.rs specific options
exec Run commands on all workspaces in the current directory and
subdirectories
fmt `cargo fmt` with options useful for testing and continuous
integration
help Print this message or the help of the given subcommand(s)
lint Run lint commands at once
pre-release Run pre-release checks
sync-rdme `cargo sync-rdme` with options useful for testing and continuous
integration
test `cargo test` with options useful for testing and continuous
integration
tidy Fix the package problems
udeps `cargo udeps` with options useful for testing and continuous
integration
Examples
Use the premade entry point function with default configuration (main
feature is required):
use cli_xtask::{Result, Xtask};
fn main() -> Result<()> {
<Xtask>::main()
}
Use the premade entry point function and custom configuration (main
feature is required):
use cli_xtask::{config::Config, Result, Xtask};
fn main() -> Result<()> {
<Xtask>::main_with_config(|| Ok(Config::new()))
}
If you don’t want to use the main
feature, write the main function as
follows:
use cli_xtask::{clap::Parser, config::Config, error_handler, logger, Result, Xtask};
fn main() -> Result<()> {
// Parse command line arguments
let command = <Xtask>::parse();
// Setup error handler and logger
error_handler::install()?; // `error-handler` feature is required
logger::install(command.verbosity.get())?; // `logger` feature is required
// Run the subcommand specified by the command line arguments
command.run(&Config::new())?;
Ok(())
}
If you want to define your own subcommands, declare the type that implements
clap::Subcommand
and Run
, then use Xtask<YourOwnSubcommand>
instead of Xtask
.
use cli_xtask::{
clap::{self, Parser},
config::Config,
subcommand, Result, Run, Xtask,
};
// Define your own subcommand arguments
#[derive(Debug, clap::Subcommand)]
enum YourOwnSubcommand {
#[clap(flatten)]
Predefined(subcommand::Subcommand),
/// Run foo function.
Foo,
/// Run bar function
Bar,
}
impl Run for YourOwnSubcommand {
fn run(&self, config: &Config) -> Result<()> {
match self {
Self::Predefined(subcommand) => subcommand.run(config)?,
Self::Foo => println!("foo!"),
Self::Bar => println!("bar!"),
}
Ok(())
}
fn into_any(self: Box<Self>) -> Box<dyn std::any::Any> {
self
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
self
}
}
fn main() -> Result<()> {
Xtask::<YourOwnSubcommand>::main()
}
Fields (Non-exhaustive)
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.verbosity: Verbosity
Verbosity level
subcommand: Option<Subcommand>
Subcommand to run
Implementations
sourceimpl<Subcommand> Xtask<Subcommand>where
Subcommand: Subcommand + Run,
impl<Subcommand> Xtask<Subcommand>where
Subcommand: Subcommand + Run,
sourcepub fn main() -> Result<()>
Available on crate feature main
only.
pub fn main() -> Result<()>
main
only.Entry point for xtask crate.
This function initializes error handler and logger, then runs the subcommand. Default configuration will be passed to subcommand.
Examples
use cli_xtask::{Result, Xtask};
fn main() -> Result<()> {
<Xtask>::main()
}
sourcepub fn main_with_config<'a>(
config: impl FnOnce() -> Result<Config<'a>>
) -> Result<()>
Available on crate feature main
only.
pub fn main_with_config<'a>(
config: impl FnOnce() -> Result<Config<'a>>
) -> Result<()>
main
only.Entry point for xtask crate.
This function initializes error handler and logger, then runs the
subcommand. Generated configuration by config
argument will be
passed to subcommand.
Examples
use cli_xtask::{config::Config, Result, Xtask};
fn main() -> Result<()> {
<Xtask>::main_with_config(|| Ok(Config::new()))
}
sourceimpl<Subcommand> Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> Xtask<Subcommand>where
Subcommand: Subcommand,
sourcepub fn run(&self, config: &Config<'_>) -> Result<()>where
Subcommand: Run,
pub fn run(&self, config: &Config<'_>) -> Result<()>where
Subcommand: Run,
Runs the subcommand specified by the command line arguments.
Examples
use cli_xtask::{clap::Parser, config::Config, error_handler, logger, Result, Xtask};
fn main() -> Result<()> {
// Parse command line arguments
let command = <Xtask>::parse();
// Setup error handler and logger
error_handler::install()?; // `error-handler` feature is required
logger::install(command.verbosity.get())?; // `logger` feature is required
// Run the subcommand specified by the command line arguments
command.run(&Config::new())?;
Ok(())
}
Trait Implementations
sourceimpl<Subcommand> Args for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> Args for Xtask<Subcommand>where
Subcommand: Subcommand,
sourceimpl<Subcommand: Clone> Clone for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand: Clone> Clone for Xtask<Subcommand>where
Subcommand: Subcommand,
sourceimpl<Subcommand> CommandFactory for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> CommandFactory for Xtask<Subcommand>where
Subcommand: Subcommand,
sourcefn into_app_for_update<'b>() -> Command<'b>
fn into_app_for_update<'b>() -> Command<'b>
CommandFactory::command_for_update
sourcefn command_for_update<'help>() -> App<'help>
fn command_for_update<'help>() -> App<'help>
sourceimpl<Subcommand: Debug> Debug for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand: Debug> Debug for Xtask<Subcommand>where
Subcommand: Subcommand,
sourceimpl<Subcommand: Default> Default for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand: Default> Default for Xtask<Subcommand>where
Subcommand: Subcommand,
sourceimpl<Subcommand> FromArgMatches for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> FromArgMatches for Xtask<Subcommand>where
Subcommand: Subcommand,
sourcefn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
sourcefn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches
) -> Result<Self, Error>
fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches
) -> Result<Self, Error>
sourcefn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches
) -> Result<(), Error>
fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches
) -> Result<(), Error>
ArgMatches
to self
.sourcefn update_from_arg_matches_mut(
&mut self,
__clap_arg_matches: &mut ArgMatches
) -> Result<(), Error>
fn update_from_arg_matches_mut(
&mut self,
__clap_arg_matches: &mut ArgMatches
) -> Result<(), Error>
ArgMatches
to self
.sourceimpl<Subcommand> Parser for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> Parser for Xtask<Subcommand>where
Subcommand: Subcommand,
sourcefn parse_from<I, T>(itr: I) -> Selfwhere
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
fn parse_from<I, T>(itr: I) -> Selfwhere
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
sourcefn try_parse_from<I, T>(itr: I) -> Result<Self, Error>where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
sourcefn update_from<I, T>(&mut self, itr: I)where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
fn update_from<I, T>(&mut self, itr: I)where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
sourcefn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error>where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error>where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
Auto Trait Implementations
impl<Subcommand> RefUnwindSafe for Xtask<Subcommand>where
Subcommand: RefUnwindSafe,
impl<Subcommand> Send for Xtask<Subcommand>where
Subcommand: Send,
impl<Subcommand> Sync for Xtask<Subcommand>where
Subcommand: Sync,
impl<Subcommand> Unpin for Xtask<Subcommand>where
Subcommand: Unpin,
impl<Subcommand> UnwindSafe for Xtask<Subcommand>where
Subcommand: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<D> OwoColorize for D
impl<D> OwoColorize for D
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn black(&'a self) -> FgColorDisplay<'a, Black, Self>
fn black(&'a self) -> FgColorDisplay<'a, Black, Self>
fn on_black(&'a self) -> BgColorDisplay<'a, Black, Self>
fn on_black(&'a self) -> BgColorDisplay<'a, Black, Self>
fn red(&'a self) -> FgColorDisplay<'a, Red, Self>
fn red(&'a self) -> FgColorDisplay<'a, Red, Self>
fn on_red(&'a self) -> BgColorDisplay<'a, Red, Self>
fn on_red(&'a self) -> BgColorDisplay<'a, Red, Self>
fn green(&'a self) -> FgColorDisplay<'a, Green, Self>
fn green(&'a self) -> FgColorDisplay<'a, Green, Self>
fn on_green(&'a self) -> BgColorDisplay<'a, Green, Self>
fn on_green(&'a self) -> BgColorDisplay<'a, Green, Self>
fn yellow(&'a self) -> FgColorDisplay<'a, Yellow, Self>
fn yellow(&'a self) -> FgColorDisplay<'a, Yellow, Self>
fn on_yellow(&'a self) -> BgColorDisplay<'a, Yellow, Self>
fn on_yellow(&'a self) -> BgColorDisplay<'a, Yellow, Self>
fn blue(&'a self) -> FgColorDisplay<'a, Blue, Self>
fn blue(&'a self) -> FgColorDisplay<'a, Blue, Self>
fn on_blue(&'a self) -> BgColorDisplay<'a, Blue, Self>
fn on_blue(&'a self) -> BgColorDisplay<'a, Blue, Self>
fn magenta(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn magenta(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn on_magenta(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_magenta(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn purple(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn purple(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn on_purple(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_purple(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn cyan(&'a self) -> FgColorDisplay<'a, Cyan, Self>
fn cyan(&'a self) -> FgColorDisplay<'a, Cyan, Self>
fn on_cyan(&'a self) -> BgColorDisplay<'a, Cyan, Self>
fn on_cyan(&'a self) -> BgColorDisplay<'a, Cyan, Self>
fn white(&'a self) -> FgColorDisplay<'a, White, Self>
fn white(&'a self) -> FgColorDisplay<'a, White, Self>
fn on_white(&'a self) -> BgColorDisplay<'a, White, Self>
fn on_white(&'a self) -> BgColorDisplay<'a, White, Self>
fn default_color(&'a self) -> FgColorDisplay<'a, Default, Self>
fn default_color(&'a self) -> FgColorDisplay<'a, Default, Self>
fn on_default_color(&'a self) -> BgColorDisplay<'a, Default, Self>
fn on_default_color(&'a self) -> BgColorDisplay<'a, Default, Self>
fn bright_black(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
fn bright_black(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
fn on_bright_black(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
fn on_bright_black(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
fn bright_red(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
fn bright_red(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
fn on_bright_red(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
fn on_bright_red(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
fn bright_green(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
fn bright_green(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
fn on_bright_green(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
fn on_bright_green(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
fn bright_yellow(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
fn bright_yellow(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
fn on_bright_yellow(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
fn on_bright_yellow(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
fn bright_blue(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
fn bright_blue(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
fn on_bright_blue(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
fn on_bright_blue(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
fn bright_magenta(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_magenta(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_magenta(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_magenta(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn bright_purple(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_purple(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_purple(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_purple(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn bright_cyan(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
fn bright_cyan(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
fn on_bright_cyan(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
fn on_bright_cyan(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
fn bright_white(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
fn bright_white(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
fn on_bright_white(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
fn on_bright_white(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
fn bold(&'a self) -> BoldDisplay<'a, Self>
fn bold(&'a self) -> BoldDisplay<'a, Self>
fn dimmed(&'a self) -> DimDisplay<'a, Self>
fn dimmed(&'a self) -> DimDisplay<'a, Self>
fn italic(&'a self) -> ItalicDisplay<'a, Self>
fn italic(&'a self) -> ItalicDisplay<'a, Self>
fn underline(&'a self) -> UnderlineDisplay<'a, Self>
fn underline(&'a self) -> UnderlineDisplay<'a, Self>
fn blink(&'a self) -> BlinkDisplay<'a, Self>
fn blink(&'a self) -> BlinkDisplay<'a, Self>
fn blink_fast(&'a self) -> BlinkFastDisplay<'a, Self>
fn blink_fast(&'a self) -> BlinkFastDisplay<'a, Self>
fn reversed(&'a self) -> ReversedDisplay<'a, Self>
fn reversed(&'a self) -> ReversedDisplay<'a, Self>
fn strikethrough(&'a self) -> StrikeThroughDisplay<'a, Self>
fn strikethrough(&'a self) -> StrikeThroughDisplay<'a, Self>
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 morefn 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