#[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)
Rust project automation command
Usage: cargo xtask [OPTIONS] [COMMAND]
Commands:
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
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
help Print this message or the help of the given subcommand(s)
Options:
-v, --verbose... More output per occurrence
-q, --quiet... Less output per occurrence
-h, --help Print help
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§
source§impl<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()))
}
source§impl<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§
source§impl<Subcommand> Args for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> Args for Xtask<Subcommand>where Subcommand: Subcommand,
source§fn group_id() -> Option<Id>
fn group_id() -> Option<Id>
ArgGroup::id
][crate::ArgGroup::id] for this set of argumentssource§fn augment_args<'b>(__clap_app: Command) -> Command
fn augment_args<'b>(__clap_app: Command) -> Command
source§fn augment_args_for_update<'b>(__clap_app: Command) -> Command
fn augment_args_for_update<'b>(__clap_app: Command) -> Command
source§impl<Subcommand> FromArgMatches for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> FromArgMatches for Xtask<Subcommand>where Subcommand: Subcommand,
source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
source§fn 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>
source§fn 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
.source§fn 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
.source§impl<Subcommand> Parser for Xtask<Subcommand>where
Subcommand: Subcommand,
impl<Subcommand> Parser for Xtask<Subcommand>where Subcommand: Subcommand,
§fn try_parse() -> Result<Self, Error<RichFormatter>>
fn try_parse() -> Result<Self, Error<RichFormatter>>
std::env::args_os()
, return Err on error.§fn 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,
§fn try_parse_from<I, T>(itr: I) -> Result<Self, Error<RichFormatter>>where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
fn try_parse_from<I, T>(itr: I) -> Result<Self, Error<RichFormatter>>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,
fn update_from<I, T>(&mut self, itr: I)where I: IntoIterator<Item = T>, T: Into<OsString> + Clone,
§fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error<RichFormatter>>where
I: IntoIterator<Item = T>,
T: Into<OsString> + Clone,
fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error<RichFormatter>>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§
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> 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>
§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 on_yellow<'a>(&'a self) -> BgColorDisplay<'a, Yellow, Self>
fn on_yellow<'a>(&'a self) -> BgColorDisplay<'a, Yellow, Self>
§fn magenta<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn magenta<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
§fn on_magenta<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_magenta<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
§fn on_purple<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_purple<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
§fn default_color<'a>(&'a self) -> FgColorDisplay<'a, Default, Self>
fn default_color<'a>(&'a self) -> FgColorDisplay<'a, Default, Self>
§fn on_default_color<'a>(&'a self) -> BgColorDisplay<'a, Default, Self>
fn on_default_color<'a>(&'a self) -> BgColorDisplay<'a, Default, Self>
§fn bright_black<'a>(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
fn bright_black<'a>(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
§fn on_bright_black<'a>(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
fn on_bright_black<'a>(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
§fn bright_red<'a>(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
fn bright_red<'a>(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
§fn on_bright_red<'a>(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
fn on_bright_red<'a>(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
§fn bright_green<'a>(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
fn bright_green<'a>(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
§fn on_bright_green<'a>(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
fn on_bright_green<'a>(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
§fn bright_yellow<'a>(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
fn bright_yellow<'a>(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
§fn on_bright_yellow<'a>(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
fn on_bright_yellow<'a>(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
§fn bright_blue<'a>(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
fn bright_blue<'a>(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
§fn on_bright_blue<'a>(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
fn on_bright_blue<'a>(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
§fn bright_magenta<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_magenta<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
§fn on_bright_magenta<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_magenta<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
§fn bright_purple<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_purple<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
§fn on_bright_purple<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_purple<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
§fn bright_cyan<'a>(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
fn bright_cyan<'a>(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
§fn on_bright_cyan<'a>(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
fn on_bright_cyan<'a>(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
§fn bright_white<'a>(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
fn bright_white<'a>(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
§fn on_bright_white<'a>(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
fn on_bright_white<'a>(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
§fn blink_fast<'a>(&'a self) -> BlinkFastDisplay<'a, Self>
fn blink_fast<'a>(&'a self) -> BlinkFastDisplay<'a, Self>
§fn strikethrough<'a>(&'a self) -> StrikeThroughDisplay<'a, Self>
fn strikethrough<'a>(&'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 more§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