build_utils/source/
file.rs1use crate::source::{BuildSource};
2use std::path::PathBuf;
3use crate::build::BuildStepError;
4use std::hash::{Hasher, Hash};
5
6#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Copy, Clone)]
7pub enum BuildSourceDirectoryError {
8 TargetDoesNotExists,
9 TargetIsNotADirectory,
10 DirectoryNotAccessable
11}
12
13pub struct BuildSourceDirectory {
14 path: PathBuf
15}
16
17impl BuildSourceDirectory {
18 pub fn new(target: PathBuf) -> Result<Self, BuildSourceDirectoryError> {
19 if target.exists() {
20 Err(BuildSourceDirectoryError::TargetDoesNotExists)
21 } else if !target.is_dir() {
22 Err(BuildSourceDirectoryError::TargetIsNotADirectory)
23 } else if let Ok(_) = target.read_dir() {
24 Err(BuildSourceDirectoryError::DirectoryNotAccessable)
25 } else {
26 Ok(BuildSourceDirectory{ path: target })
27 }
28 }
29}
30
31impl BuildSource for BuildSourceDirectory {
32 fn name(&self) -> &str {
33 "directory"
34 }
35
36 fn hash(&self, target: &mut Box<dyn Hasher>) {
37 self.path.hash(target);
38 }
39
40 fn setup(&mut self) -> Result<(), BuildStepError> {
41 Ok(())
42 }
43
44 fn local_directory(&self) -> &PathBuf {
45 &self.path
46 }
47
48 fn cleanup(&mut self) { }
49}