support working_directory and command string
This commit is contained in:
parent
1cf20810c5
commit
500061375c
2 changed files with 25 additions and 3 deletions
|
@ -14,6 +14,7 @@ serde = { version = "1.0", features = ["derive"] }
|
|||
toml = "0.5"
|
||||
planetwars-matchrunner = { path = "../planetwars-matchrunner" }
|
||||
clap = { version = "3.2", features = ["derive", "env"]}
|
||||
shlex = "1.1"
|
||||
|
||||
[build-dependencies]
|
||||
tonic-build = "0.7.2"
|
||||
|
|
|
@ -32,7 +32,24 @@ struct PlayMatch {
|
|||
struct BotConfig {
|
||||
#[allow(dead_code)]
|
||||
name: String,
|
||||
command: Vec<String>,
|
||||
command: Command,
|
||||
working_directory: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(untagged)]
|
||||
enum Command {
|
||||
String(String),
|
||||
Argv(Vec<String>),
|
||||
}
|
||||
|
||||
impl Command {
|
||||
pub fn to_argv(&self) -> Vec<String> {
|
||||
match self {
|
||||
Command::Argv(vec) => vec.clone(),
|
||||
Command::String(s) => shlex::split(s).expect("invalid command string"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
|
@ -76,8 +93,12 @@ async fn run_player(bot_config: BotConfig, player_key: String, channel: Channel)
|
|||
});
|
||||
|
||||
let mut bot_process = Bot {
|
||||
working_dir: PathBuf::from("."),
|
||||
argv: bot_config.command,
|
||||
working_dir: PathBuf::from(
|
||||
bot_config
|
||||
.working_directory
|
||||
.unwrap_or_else(|| ".".to_string()),
|
||||
),
|
||||
argv: bot_config.command.to_argv(),
|
||||
}
|
||||
.spawn_process();
|
||||
|
||||
|
|
Loading…
Reference in a new issue