| 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), | |
| } | |
| } | |
| } |