| use std::path::PathBuf; |
| |
| #[derive(Debug, Clone)] |
| pub(crate) struct Dirs { |
| pub(crate) source_dir: PathBuf, |
| pub(crate) download_dir: PathBuf, |
| pub(crate) build_dir: PathBuf, |
| pub(crate) dist_dir: PathBuf, |
| pub(crate) frozen: bool, |
| } |
| |
| #[doc(hidden)] |
| #[derive(Debug, Copy, Clone)] |
| enum PathBase { |
| Source, |
| Build, |
| } |
| |
| #[derive(Debug, Copy, Clone)] |
| pub(crate) struct RelPath { |
| base: PathBase, |
| suffix: &'static str, |
| } |
| |
| impl RelPath { |
| pub(crate) const fn source(suffix: &'static str) -> RelPath { |
| RelPath { base: PathBase::Source, suffix } |
| } |
| |
| pub(crate) const fn build(suffix: &'static str) -> RelPath { |
| RelPath { base: PathBase::Build, suffix } |
| } |
| |
| pub(crate) fn to_path(&self, dirs: &Dirs) -> PathBuf { |
| match self.base { |
| PathBase::Source => dirs.source_dir.join(self.suffix), |
| PathBase::Build => dirs.build_dir.join(self.suffix), |
| } |
| } |
| } |