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