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/clang.rs | |
parent | 420e77f90ba94cf9f8d3d0f7ae6395ba3ceda89f (diff) | |
download | evr-eaf9228f3a43c3654eeddbd10cfbaf172e4578f4.tar.gz |
cargo fmt
Diffstat (limited to 'src/backends/clang.rs')
-rw-r--r-- | src/backends/clang.rs | 42 |
1 files changed, 17 insertions, 25 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())?) } |