diff options
Diffstat (limited to 'planetwars-client/src/main.rs')
-rw-r--r-- | planetwars-client/src/main.rs | 27 |
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(); |