更严谨一些,干脆都用PathBuf了

This commit is contained in:
shenjack 2024-01-21 18:00:23 +08:00
parent 2135d66767
commit 6a707f891b
Signed by: shenjack
GPG Key ID: 7B1134A979775551
2 changed files with 12 additions and 34 deletions

View File

@ -1,4 +1,5 @@
use std::fmt::Display; use std::fmt::Display;
use std::path::PathBuf;
pub const HELP_MESSAGE: &str = r#"call [options] [--] [arguments] pub const HELP_MESSAGE: &str = r#"call [options] [--] [arguments]
Options: Options:
@ -6,7 +7,6 @@ Options:
--show Show console window --show Show console window
--chdir Change working directory to lib (default) --chdir Change working directory to lib (default)
--chdir=xxx Change working directory to xxx --chdir=xxx Change working directory to xxx
--dir=xxx Working directory is xxx
--bin=xxx Specify executable file --bin=xxx Specify executable file
--config=xxx Specify configuration file --config=xxx Specify configuration file
--help Print this help message --help Print this help message
@ -15,9 +15,8 @@ Options:
#[derive(Clone)] #[derive(Clone)]
pub struct Config { pub struct Config {
pub show_console: bool, pub show_console: bool,
pub chdir: Option<String>, pub chdir: Option<PathBuf>,
pub bin: Option<String>, pub bin: PathBuf,
pub dir: Option<String>,
pub config: Option<String>, pub config: Option<String>,
pub bin_arg: String, pub bin_arg: String,
} }
@ -29,7 +28,6 @@ impl Display for Config {
s.push_str(&format!(" show_console: {}\n", self.show_console)); s.push_str(&format!(" show_console: {}\n", self.show_console));
s.push_str(&format!(" chdir: {:?}\n", self.chdir)); s.push_str(&format!(" chdir: {:?}\n", self.chdir));
s.push_str(&format!(" bin: {:?}\n", self.bin)); s.push_str(&format!(" bin: {:?}\n", self.bin));
s.push_str(&format!(" dir: {:?}\n", self.dir));
s.push_str(&format!(" config: {:?}\n", self.config)); s.push_str(&format!(" config: {:?}\n", self.config));
s.push_str(&format!(" bin_arg: {:?}\n", self.bin_arg)); s.push_str(&format!(" bin_arg: {:?}\n", self.bin_arg));
s.push_str("}"); s.push_str("}");
@ -42,7 +40,7 @@ impl Config {
let mut show_console = false; let mut show_console = false;
let mut chdir: Option<String> = None; let mut chdir: Option<String> = None;
let mut bin: Option<String> = None; let mut bin: Option<String> = None;
let mut dir: Option<String> = None; let dir: Option<String> = None;
let mut config: Option<String> = None; let mut config: Option<String> = None;
let mut bin_arg = "".to_string(); let mut bin_arg = "".to_string();
// -- 表示后面的参数都是可执行文件的参数 // -- 表示后面的参数都是可执行文件的参数
@ -68,7 +66,6 @@ impl Config {
// --show 表示显示控制台 // --show 表示显示控制台
// --chdir 表示切换工作目录 // --chdir 表示切换工作目录
// --chdir=xxx 表示切换工作目录到xxx // --chdir=xxx 表示切换工作目录到xxx
// --dir=xxx 表示工作目录是xxx
// --bin=xxx 表示指定可执行文件 // --bin=xxx 表示指定可执行文件
// --config=xxx 表示指定配置文件 // --config=xxx 表示指定配置文件
// --help 输出上面这一堆东西 // --help 输出上面这一堆东西
@ -81,19 +78,23 @@ impl Config {
show_console = true; show_console = true;
} else if args[i].starts_with("--chdir=") { } else if args[i].starts_with("--chdir=") {
chdir = Some(args[i][8..].to_string()); chdir = Some(args[i][8..].to_string());
} else if args[i].starts_with("--dir=") {
dir = Some(args[i][6..].to_string());
} else if args[i].starts_with("--bin=") { } else if args[i].starts_with("--bin=") {
bin = Some(args[i][6..].to_string()); bin = Some(args[i][6..].to_string());
} else if args[i].starts_with("--config=") { } else if args[i].starts_with("--config=") {
config = Some(args[i][9..].to_string()); config = Some(args[i][9..].to_string());
} }
} }
// 拼接上 dir
let bin = if let Some(dir) = dir {
PathBuf::from(dir).join(bin.unwrap_or("main".to_string()))
} else {
PathBuf::from(bin.unwrap_or("./lib/main".to_string()))
};
let chdir = chdir.map(|x| PathBuf::from(x));
Some(Config { Some(Config {
show_console, show_console,
chdir, chdir,
bin, bin,
dir,
config, config,
bin_arg, bin_arg,
}) })

View File

@ -1,6 +1,4 @@
#![windows_subsystem = "windows"] // #![windows_subsystem = "windows"]
use std::process::Command;
#[cfg(windows)] #[cfg(windows)]
mod win; mod win;
@ -20,25 +18,4 @@ fn main() {
// 输出相关信息 // 输出相关信息
println!("call {}", VERSION); println!("call {}", VERSION);
println!("config: {}", config); println!("config: {}", config);
if config.show_console {
win::show_window();
} else {
win::hide_window();
}
if config.chdir.is_some() {
std::env::set_current_dir(config.chdir.unwrap()).unwrap();
}
if config.dir.is_some() {
std::env::set_current_dir(config.dir.unwrap()).unwrap();
}
if config.config.is_some() {
std::env::set_current_dir(config.config.unwrap()).unwrap();
}
if config.bin.is_some() {
let mut cmd = Command::new(config.bin.unwrap());
if config.bin_arg.len() > 0 {
cmd.arg(config.bin_arg);
}
cmd.spawn().unwrap();
}
} }