Files
uv/crates/uv-cache/src/cli.rs
T
danieleades 8d721830db Clippy pedantic (#1963)
Address a few pedantic lints

lints are separated into separate commits so they can be reviewed
individually.

I've not added enforcement for any of these lints, but that could be
added if desirable.
2024-02-25 14:04:05 -05:00

50 lines
1.3 KiB
Rust

#![cfg(feature = "clap")]
use std::io;
use std::path::PathBuf;
use clap::Parser;
use directories::ProjectDirs;
use crate::Cache;
#[derive(Parser, Debug, Clone)]
pub struct CacheArgs {
/// Avoid reading from or writing to the cache.
#[arg(
global = true,
long,
short,
alias = "no-cache-dir",
env = "UV_NO_CACHE"
)]
no_cache: bool,
/// Path to the cache directory.
#[arg(global = true, long, env = "UV_CACHE_DIR")]
cache_dir: Option<PathBuf>,
}
impl TryFrom<CacheArgs> for Cache {
type Error = io::Error;
/// Prefer, in order:
/// 1. A temporary cache directory, if the user requested `--no-cache`.
/// 2. The specific cache directory specified by the user via `--cache-dir` or `UV_CACHE_DIR`.
/// 3. The system-appropriate cache directory.
/// 4. A `.uv_cache` directory in the current working directory.
///
/// Returns an absolute cache dir.
fn try_from(value: CacheArgs) -> Result<Self, Self::Error> {
if value.no_cache {
Self::temp()
} else if let Some(cache_dir) = value.cache_dir {
Self::from_path(cache_dir)
} else if let Some(project_dirs) = ProjectDirs::from("", "", "uv") {
Self::from_path(project_dirs.cache_dir())
} else {
Self::from_path(".uv_cache")
}
}
}