diff options
author | syn <isaqtm@gmail.com> | 2020-12-08 10:37:04 +0300 |
---|---|---|
committer | syn <isaqtm@gmail.com> | 2020-12-08 10:37:04 +0300 |
commit | eaf9228f3a43c3654eeddbd10cfbaf172e4578f4 (patch) | |
tree | 6e24fe86e7ef4e580b559e41b77c113036248a68 /src/backends | |
parent | 420e77f90ba94cf9f8d3d0f7ae6395ba3ceda89f (diff) | |
download | evr-eaf9228f3a43c3654eeddbd10cfbaf172e4578f4.tar.gz |
cargo fmt
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/clang.rs | 42 | ||||
-rw-r--r-- | src/backends/clang_c.rs | 42 | ||||
-rw-r--r-- | src/backends/mod.rs | 19 | ||||
-rw-r--r-- | src/backends/python.rs | 22 | ||||
-rw-r--r-- | src/backends/run_error.rs | 6 |
5 files changed, 54 insertions, 77 deletions
diff --git a/src/backends/clang.rs b/src/backends/clang.rs index 361c759..cf42c41 100644 --- a/src/backends/clang.rs +++ b/src/backends/clang.rs @@ -1,14 +1,13 @@ +use crate::backends::{mk_tmp_dir, Backend, RunError}; +use crate::serde_duration::deserialize_duration; +use crate::wait::{wait_child, ChildExitStatus}; use serde_derive::Deserialize; -use crate::backends::{ Backend, mk_tmp_dir, RunError }; -use std::path::{ Path, PathBuf }; -use std::io::{ Result as IoResult, Error, ErrorKind }; -use std::process::{ Command }; use std::collections::hash_map::DefaultHasher; -use std::hash::{ Hash, Hasher }; -use crate::wait::{ ChildExitStatus, wait_child }; +use std::hash::{Hash, Hasher}; +use std::io::{Error, ErrorKind, Result as IoResult}; +use std::path::{Path, PathBuf}; +use std::process::Command; use std::time::Duration; -use crate::serde_duration::deserialize_duration; - #[derive(Debug, Deserialize, Default)] pub struct ClangBackend { @@ -21,10 +20,9 @@ pub struct ClangBackend { cc: String, #[serde(default = "default_timeout", deserialize_with = "deserialize_duration")] - timeout: Duration + timeout: Duration, } - fn default_cc() -> String { "clang++".to_string() } @@ -33,39 +31,35 @@ fn default_timeout() -> Duration { Duration::from_secs(1) } - fn get_binary_by_filename(fname: &Path) -> IoResult<PathBuf> { let hashed_fname = { let mut hasher = DefaultHasher::new(); fname.hash(&mut hasher); format!("{:x}", hasher.finish()) }; - + Ok(mk_tmp_dir()?.join(hashed_fname)) } - impl ClangBackend { fn build(&self, fname: &Path) -> IoResult<PathBuf> { let binary_fname = get_binary_by_filename(fname)?; - let get_mtime = |file| { - std::fs::metadata(file)? - .modified() - }; + let get_mtime = |file| std::fs::metadata(file)?.modified(); let src_mod = get_mtime(fname); let binary_mod = get_mtime(&binary_fname); if src_mod.is_err() || binary_mod.is_err() || src_mod.unwrap() > binary_mod.unwrap() { let clang_status = Command::new(&self.cc) - .arg("-x").arg("c++") + .arg("-x") + .arg("c++") .arg(fname.as_os_str()) - .arg("-o").arg(&binary_fname) + .arg("-o") + .arg(&binary_fname) .args(&self.args) .status()?; if !clang_status.success() { - return Err(Error::new(ErrorKind::Other, - "could not compile")); + return Err(Error::new(ErrorKind::Other, "could not compile")); } } @@ -73,20 +67,18 @@ impl ClangBackend { } } - impl Backend for ClangBackend { fn get_template(&self) -> Option<&str> { match self.template { Some(ref t) => Some(t), - None => None + None => None, } } fn run(&self, fname: &Path) -> Result<ChildExitStatus, RunError> { let binary_fname = self.build(fname)?; - let proc = Command::new(&binary_fname) - .spawn()?; + let proc = Command::new(&binary_fname).spawn()?; Ok(wait_child(proc, self.timeout, std::time::Instant::now())?) } diff --git a/src/backends/clang_c.rs b/src/backends/clang_c.rs index 1aa39e4..7ee5161 100644 --- a/src/backends/clang_c.rs +++ b/src/backends/clang_c.rs @@ -1,14 +1,13 @@ +use crate::backends::{mk_tmp_dir, Backend, RunError}; +use crate::serde_duration::deserialize_duration; +use crate::wait::{wait_child, ChildExitStatus}; use serde_derive::Deserialize; -use crate::backends::{ Backend, mk_tmp_dir, RunError }; -use std::path::{ Path, PathBuf }; -use std::io::{ Result as IoResult, Error, ErrorKind }; -use std::process::Command; use std::collections::hash_map::DefaultHasher; -use std::hash::{ Hash, Hasher }; -use crate::wait::{ ChildExitStatus, wait_child }; +use std::hash::{Hash, Hasher}; +use std::io::{Error, ErrorKind, Result as IoResult}; +use std::path::{Path, PathBuf}; +use std::process::Command; use std::time::Duration; -use crate::serde_duration::deserialize_duration; - #[derive(Debug, Deserialize, Default)] pub struct ClangCBackend { @@ -21,10 +20,9 @@ pub struct ClangCBackend { cc: String, #[serde(default = "default_timeout", deserialize_with = "deserialize_duration")] - timeout: Duration + timeout: Duration, } - fn default_cc() -> String { "clang".to_string() } @@ -33,40 +31,36 @@ fn default_timeout() -> Duration { Duration::from_secs(1) } - fn get_binary_by_filename(fname: &Path) -> IoResult<PathBuf> { let hashed_fname = { let mut hasher = DefaultHasher::new(); fname.hash(&mut hasher); format!("{:x}", hasher.finish()) }; - + Ok(mk_tmp_dir()?.join(hashed_fname)) } - impl ClangCBackend { fn build(&self, fname: &Path) -> IoResult<PathBuf> { let binary_fname = get_binary_by_filename(fname)?; - let get_mtime = |file| { - std::fs::metadata(file)? - .modified() - }; + let get_mtime = |file| std::fs::metadata(file)?.modified(); let src_mod = get_mtime(fname); let binary_mod = get_mtime(&binary_fname); if src_mod.is_err() || binary_mod.is_err() || src_mod.unwrap() > binary_mod.unwrap() { let clang_status = Command::new(&self.cc) - .arg("-x").arg("c") + .arg("-x") + .arg("c") .arg(fname.clone().as_os_str()) - .arg("-o").arg(&binary_fname) + .arg("-o") + .arg(&binary_fname) .args(&self.args) .status()?; if !clang_status.success() { - return Err(Error::new(ErrorKind::Other, - "could not compile")); + return Err(Error::new(ErrorKind::Other, "could not compile")); } } @@ -74,20 +68,18 @@ impl ClangCBackend { } } - impl Backend for ClangCBackend { fn get_template(&self) -> Option<&str> { match self.template { Some(ref t) => Some(t), - None => None + None => None, } } fn run(&self, fname: &Path) -> Result<ChildExitStatus, RunError> { let binary_fname = self.build(fname)?; - let proc = Command::new(&binary_fname) - .spawn()?; + let proc = Command::new(&binary_fname).spawn()?; Ok(wait_child(proc, self.timeout, std::time::Instant::now())?) } diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 50bef36..6d402af 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,21 +1,20 @@ -use std::path::{ Path, PathBuf }; -use std::env::temp_dir; -use lazy_static::lazy_static; -use std::io::{ Error, ErrorKind }; use crate::wait::ChildExitStatus; +use lazy_static::lazy_static; +use std::env::temp_dir; +use std::io::{Error, ErrorKind}; +use std::path::{Path, PathBuf}; -pub mod python; pub mod clang; pub mod clang_c; +pub mod python; -pub use python::PythonBackend; pub use clang::ClangBackend; pub use clang_c::ClangCBackend; +pub use python::PythonBackend; pub mod run_error; pub use run_error::RunError; - lazy_static! { static ref EVR_TMP_DIR: PathBuf = temp_dir().join("evr-tmp"); } @@ -31,8 +30,10 @@ fn mk_tmp_dir() -> std::io::Result<&'static std::path::PathBuf> { std::fs::create_dir(&*EVR_TMP_DIR)?; } else { if !EVR_TMP_DIR.is_dir() { - return Err(Error::new(ErrorKind::AlreadyExists, - "tmp dir already exists and not a directory")) + return Err(Error::new( + ErrorKind::AlreadyExists, + "tmp dir already exists and not a directory", + )); } } Ok(&*EVR_TMP_DIR) diff --git a/src/backends/python.rs b/src/backends/python.rs index 7e0dac1..57bd624 100644 --- a/src/backends/python.rs +++ b/src/backends/python.rs @@ -1,9 +1,9 @@ +use crate::backends::{Backend, RunError}; +use crate::serde_duration::deserialize_duration; +use crate::wait::{wait_child, ChildExitStatus}; use serde_derive::Deserialize; -use crate::backends::{ Backend, RunError }; -use std::process::{ Command }; use std::path::Path; -use crate::wait::{ wait_child, ChildExitStatus }; -use crate::serde_duration::deserialize_duration; +use std::process::Command; use std::time::Duration; #[derive(Debug, Deserialize, Default)] @@ -15,29 +15,21 @@ pub struct PythonBackend { timeout: Duration, } - fn default_timeout() -> Duration { Duration::from_secs(1) } - impl PythonBackend { fn get_interpreter(&self) -> String { - format!( - "python{}", - self.version - .as_ref() - .unwrap_or(&String::new()) - ) + format!("python{}", self.version.as_ref().unwrap_or(&String::new())) } } - impl Backend for PythonBackend { fn get_template(&self) -> Option<&str> { match self.template { Some(ref t) => Some(t), - None => None + None => None, } } @@ -50,4 +42,4 @@ impl Backend for PythonBackend { Ok(wait_child(child, self.timeout, timer)?) } -}
\ No newline at end of file +} diff --git a/src/backends/run_error.rs b/src/backends/run_error.rs index 6203bbe..0681ea8 100644 --- a/src/backends/run_error.rs +++ b/src/backends/run_error.rs @@ -4,7 +4,7 @@ use std::io::Error as IoError; #[derive(Debug)] pub enum RunError { IoError(std::io::Error), - WaitError(WaitError) + WaitError(WaitError), } impl From<IoError> for RunError { @@ -32,7 +32,7 @@ impl std::error::Error for RunError { fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { match *self { RunError::IoError(ref e) => Some(e), - RunError::WaitError(ref e) => Some(e) + RunError::WaitError(ref e) => Some(e), } } -}
\ No newline at end of file +} |