build_utils/source/
file.rs

1use 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}