code_executor/language/
mod.rs1mod cpp;
2mod java;
3mod python;
4mod rust;
5
6use tokio::process::Command;
7
8pub use cpp::CPP;
9pub use java::JAVA;
10pub use python::PYTHON;
11pub use rust::RUST;
12
13#[derive(Debug, Clone, Copy, Default)]
14pub struct Language {
15 pub compile_args: Option<&'static str>,
16 pub run_args: &'static str,
17 pub extension: &'static str,
18}
19
20impl Language {
21 pub fn get_compile_command(&self, main: &str) -> Option<Command> {
22 let args = self.compile_args?;
23 let args = args.replace("{main}", main);
24 let mut args = args.split_whitespace();
25 let binary = args.next().unwrap();
26
27 let mut command = Command::new(binary);
28 command.args(args);
29
30 Some(command)
31 }
32 pub fn get_run_command(&self, main: &str) -> Command {
33 let args = self.run_args.replace("{main}", main);
34 let mut args = args.split_whitespace();
35 let binary = args.next().unwrap();
36
37 let mut command = Command::new(binary);
38 command.args(args);
39
40 command
41 }
42 pub fn is_interpreted(&self) -> bool {
43 self.compile_args.is_none()
44 }
45}