add platform flag (#4918)
This commit is contained in:
1 parent
d61848609f
commit
6824887856
1 file changed
+49
-30
@@ -1,5 +1,5 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::{arg, ArgMatches, Args, FromArgMatches};
|
use clap::{arg, Arg, ArgMatches, Args, FromArgMatches};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
@@ -47,6 +47,39 @@ pub(crate) enum Platform {
|
|||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Platform {
|
||||||
|
fn from_identifier(identifier: &str) -> std::result::Result<Self, clap::Error> {
|
||||||
|
match identifier {
|
||||||
|
"web" => Ok(Self::Web),
|
||||||
|
"macos" => Ok(Self::MacOS),
|
||||||
|
"windows" => Ok(Self::Windows),
|
||||||
|
"linux" => Ok(Self::Linux),
|
||||||
|
"ios" => Ok(Self::Ios),
|
||||||
|
"android" => Ok(Self::Android),
|
||||||
|
"server" => Ok(Self::Server),
|
||||||
|
"liveview" => Ok(Self::Liveview),
|
||||||
|
"desktop" => {
|
||||||
|
if cfg!(target_os = "macos") {
|
||||||
|
Ok(Self::MacOS)
|
||||||
|
} else if cfg!(target_os = "windows") {
|
||||||
|
Ok(Self::Windows)
|
||||||
|
} else if cfg!(unix) {
|
||||||
|
Ok(Self::Linux)
|
||||||
|
} else {
|
||||||
|
Err(clap::Error::raw(
|
||||||
|
clap::error::ErrorKind::InvalidValue,
|
||||||
|
"Desktop alias is not supported on this platform",
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => Err(clap::Error::raw(
|
||||||
|
clap::error::ErrorKind::InvalidValue,
|
||||||
|
format!("Unknown platform: {identifier}"),
|
||||||
|
)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Args for Platform {
|
impl Args for Platform {
|
||||||
fn augment_args_for_update(cmd: clap::Command) -> clap::Command {
|
fn augment_args_for_update(cmd: clap::Command) -> clap::Command {
|
||||||
Self::augment_args(cmd)
|
Self::augment_args(cmd)
|
||||||
@@ -63,6 +96,17 @@ impl Args for Platform {
|
|||||||
.arg(arg!(--android "Target an android app").help_heading(HELP_HEADING))
|
.arg(arg!(--android "Target an android app").help_heading(HELP_HEADING))
|
||||||
.arg(arg!(--server "Target a server build").help_heading(HELP_HEADING))
|
.arg(arg!(--server "Target a server build").help_heading(HELP_HEADING))
|
||||||
.arg(arg!(--liveview "Target a liveview build").help_heading(HELP_HEADING))
|
.arg(arg!(--liveview "Target a liveview build").help_heading(HELP_HEADING))
|
||||||
|
.arg(
|
||||||
|
Arg::new("platform")
|
||||||
|
.long("platform")
|
||||||
|
.value_name("PLATFORM")
|
||||||
|
.help("Manually set the platform (web, macos, windows, linux, ios, android, server, liveview)")
|
||||||
|
.help_heading(HELP_HEADING)
|
||||||
|
.value_parser([
|
||||||
|
"web", "macos", "windows", "linux", "ios", "android", "server", "liveview", "desktop",
|
||||||
|
])
|
||||||
|
.conflicts_with("target_alias"),
|
||||||
|
)
|
||||||
.group(
|
.group(
|
||||||
clap::ArgGroup::new("target_alias")
|
clap::ArgGroup::new("target_alias")
|
||||||
.args([
|
.args([
|
||||||
@@ -77,35 +121,10 @@ impl Args for Platform {
|
|||||||
|
|
||||||
impl FromArgMatches for Platform {
|
impl FromArgMatches for Platform {
|
||||||
fn from_arg_matches(matches: &ArgMatches) -> Result<Self, clap::Error> {
|
fn from_arg_matches(matches: &ArgMatches) -> Result<Self, clap::Error> {
|
||||||
if let Some(platform) = matches.get_one::<clap::Id>("target_alias") {
|
if let Some(identifier) = matches.get_one::<String>("platform") {
|
||||||
match platform.as_str() {
|
Self::from_identifier(identifier)
|
||||||
"web" => Ok(Self::Web),
|
} else if let Some(platform) = matches.get_one::<clap::Id>("target_alias") {
|
||||||
"desktop" => {
|
Self::from_identifier(platform.as_str())
|
||||||
if cfg!(target_os = "macos") {
|
|
||||||
Ok(Self::MacOS)
|
|
||||||
} else if cfg!(target_os = "windows") {
|
|
||||||
Ok(Self::Windows)
|
|
||||||
} else if cfg!(unix) {
|
|
||||||
Ok(Self::Linux)
|
|
||||||
} else {
|
|
||||||
Err(clap::Error::raw(
|
|
||||||
clap::error::ErrorKind::InvalidValue,
|
|
||||||
"Desktop alias is not supported on this platform",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"macos" => Ok(Self::MacOS),
|
|
||||||
"windows" => Ok(Self::Windows),
|
|
||||||
"linux" => Ok(Self::Linux),
|
|
||||||
"ios" => Ok(Self::Ios),
|
|
||||||
"android" => Ok(Self::Android),
|
|
||||||
"liveview" => Ok(Self::Liveview),
|
|
||||||
"server" => Ok(Self::Server),
|
|
||||||
_ => Err(clap::Error::raw(
|
|
||||||
clap::error::ErrorKind::InvalidValue,
|
|
||||||
format!("Unknown target alias: {platform}"),
|
|
||||||
)),
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Ok(Self::Unknown)
|
Ok(Self::Unknown)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user