aboutsummaryrefslogtreecommitdiff
path: root/planetwars-client/src/main.rs
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-07-23 00:38:34 +0200
committerIlion Beyst <ilion.beyst@gmail.com>2022-07-23 00:38:34 +0200
commit500061375cae4700cb13a50705f627ba06835038 (patch)
tree24a38d4dc2ca3d7ac3fc576690812a035700f613 /planetwars-client/src/main.rs
parent1cf20810c5191c426f9226a13f4a0d0e09c8f74b (diff)
downloadplanetwars.dev-500061375cae4700cb13a50705f627ba06835038.tar.xz
planetwars.dev-500061375cae4700cb13a50705f627ba06835038.zip
support working_directory and command string
Diffstat (limited to 'planetwars-client/src/main.rs')
-rw-r--r--planetwars-client/src/main.rs27
1 files changed, 24 insertions, 3 deletions
diff --git a/planetwars-client/src/main.rs b/planetwars-client/src/main.rs
index c9d97b0..6edcc2e 100644
--- a/planetwars-client/src/main.rs
+++ b/planetwars-client/src/main.rs
@@ -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();