uv_resolver/
resolution_mode.rs1use crate::resolver::{ForkMap, ForkSet};
2use crate::{DependencyMode, Manifest, ResolverEnvironment};
3
4#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Deserialize, serde::Serialize)]
5#[serde(deny_unknown_fields, rename_all = "kebab-case")]
6#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
7#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
8pub enum ResolutionMode {
9 #[default]
11 Highest,
12 Lowest,
14 LowestDirect,
17}
18
19impl std::fmt::Display for ResolutionMode {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 match self {
22 Self::Highest => write!(f, "highest"),
23 Self::Lowest => write!(f, "lowest"),
24 Self::LowestDirect => write!(f, "lowest-direct"),
25 }
26 }
27}
28
29#[derive(Debug, Clone)]
32pub(crate) enum ResolutionStrategy {
33 Highest,
35 Lowest,
37 LowestDirect(ForkSet),
40}
41
42impl ResolutionStrategy {
43 pub(crate) fn from_mode(
44 mode: ResolutionMode,
45 manifest: &Manifest,
46 env: &ResolverEnvironment,
47 dependencies: DependencyMode,
48 ) -> Self {
49 match mode {
50 ResolutionMode::Highest => Self::Highest,
51 ResolutionMode::Lowest => Self::Lowest,
52 ResolutionMode::LowestDirect => {
53 let mut first_party = ForkMap::default();
54 for requirement in manifest.user_requirements(env, dependencies) {
55 first_party.add(&requirement, ());
56 }
57 Self::LowestDirect(first_party)
58 }
59 }
60 }
61}