mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-30 20:17:50 +00:00
47 lines
1.0 KiB
Rust
47 lines
1.0 KiB
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)]
|
|
pub(crate) enum PathBase {
|
|
Source,
|
|
Build,
|
|
}
|
|
|
|
impl PathBase {
|
|
fn to_path(self, dirs: &Dirs) -> PathBuf {
|
|
match self {
|
|
PathBase::Source => dirs.source_dir.clone(),
|
|
PathBase::Build => dirs.build_dir.clone(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[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 {
|
|
self.base.to_path(dirs).join(self.suffix)
|
|
}
|
|
}
|