40 lines
939 B
Rust
40 lines
939 B
Rust
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),
|
|
}
|
|
}
|
|
}
|