use crate::runtimes::CommandGenerator;
use std::{path::PathBuf, process::Command};
const COMMAND_JAVA: &str = "java";
const COMMAND_ARGS_JAVA: [&str; 1] = ["-jar"];
#[inline(always)]
fn command_arg_xms(size: usize) -> String {
format!("-Xms{size}m")
}
#[inline(always)]
fn command_arg_xmx(size: usize) -> String {
format!("-Xmx{size}m")
}
#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct CommandGeneratorJava {
jar_path: PathBuf,
min_heap_size: Option<usize>,
max_heap_size: Option<usize>,
}
impl CommandGeneratorJava {
pub fn new(jar_path: impl Into<PathBuf>) -> Self {
Self {
jar_path: jar_path.into(),
..Default::default()
}
}
}
impl CommandGenerator for CommandGeneratorJava {
fn generate_command(&self) -> Command {
let mut command_java = Command::new(COMMAND_JAVA);
command_java.args(COMMAND_ARGS_JAVA).arg(&self.jar_path);
if let Some(size) = self.min_heap_size {
command_java.arg(command_arg_xms(size));
}
if let Some(size) = self.max_heap_size {
command_java.arg(command_arg_xmx(size));
}
command_java
}
}