#![allow(clippy::derivable_impls, dead_code, unused_variables)]
use crate::{
common::compiler::CompilationResult,
compilers::{CompiledCode, Compiler},
};
use super::{native_runtime::NativeRuntime, CodeRuntime};
#[derive(Debug, Clone)]
pub struct JailedRuntime;
#[derive(Debug, Clone)]
pub struct JailedConfig {
native_runtime_config: super::native_runtime::NativeConfig,
}
impl Default for JailedConfig {
fn default() -> Self {
Self {
native_runtime_config: super::native_runtime::NativeConfig::default(),
}
}
}
impl CodeRuntime for JailedRuntime {
type Config = JailedConfig;
type AdditionalData = super::native_runtime::NativeAdditionalData;
type Error = std::io::Error;
fn run(
&self,
code: &crate::compilers::CompiledCode<Self>,
config: Self::Config,
) -> Result<super::ExecutionResult, Self::Error> {
todo!("JailedRuntime is not implemented yet")
}
}
impl<C> Compiler<JailedRuntime> for C
where
C: Compiler<NativeRuntime>,
{
type Config = C::Config;
fn compile(
&self,
code: &mut impl std::io::Read,
config: Self::Config,
) -> CompilationResult<crate::compilers::CompiledCode<JailedRuntime>> {
let native_code: CompiledCode<NativeRuntime> = C::compile(self, code, config)?;
Ok(CompiledCode {
executable: native_code.executable.clone(),
temp_dir_handle: native_code.temp_dir_handle.clone(),
runtime_marker: std::marker::PhantomData,
additional_data: native_code.additional_data.clone(),
})
}
}
#[allow(unused_imports)]
#[cfg(test)]
mod tests {
use super::*;
use crate::compilers::{rust_compiler::RustCompiler, Compiler};
}