diff options
Diffstat (limited to 'vendor/escargot/src/cargo.rs')
-rw-r--r-- | vendor/escargot/src/cargo.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/escargot/src/cargo.rs b/vendor/escargot/src/cargo.rs new file mode 100644 index 000000000..6e8efd220 --- /dev/null +++ b/vendor/escargot/src/cargo.rs @@ -0,0 +1,60 @@ +use std::env; +use std::ffi; +use std::process; +use std::str; + +use crate::build::CargoBuild; + +/// The current process' target triplet. +pub const CURRENT_TARGET: &str = include_str!(concat!(env!("OUT_DIR"), "/current_target.txt")); + +static CARBO_BIN: once_cell::sync::Lazy<ffi::OsString> = + once_cell::sync::Lazy::new(|| env::var_os("CARGO").unwrap_or_else(|| "cargo".into())); + +/// Top-level command. +#[derive(Debug)] +pub struct Cargo { + cmd: process::Command, +} + +impl Cargo { + /// Create a top-level command. + pub fn new() -> Self { + Self { + cmd: process::Command::new(CARBO_BIN.as_os_str()), + } + } + + /// Manually pass an argument that is unsupported. + /// + /// Caution: Passing in a sub-command or `--` can throw off the API. + pub fn arg<S: AsRef<ffi::OsStr>>(mut self, arg: S) -> Self { + self.cmd.arg(arg); + self + } + + /// Manually pass arguments that are unsupported. + /// + /// Caution: Passing in a sub-command or `--` can throw off the API. + pub fn args<I: IntoIterator<Item = S>, S: AsRef<ffi::OsStr>>(mut self, args: I) -> Self { + self.cmd.args(args); + self + } + + /// Run the `build` subcommand. + pub fn build(self) -> CargoBuild { + self.build_with("build") + } + + /// Run a custom `build` subcommand. + pub fn build_with<S: AsRef<ffi::OsStr>>(mut self, name: S) -> CargoBuild { + self.cmd.arg(name).arg("--message-format=json"); + CargoBuild::with_command(self.cmd) + } +} + +impl Default for Cargo { + fn default() -> Self { + Self::new() + } +} |