pray_core/
resolve_context.rs1use crate::lockfile::Lockfile;
2use std::collections::BTreeSet;
3
4#[derive(Debug, Clone, Default, PartialEq, Eq)]
5pub struct ResolveOptions {
6 pub offline: bool,
7 pub unlocked_packages: BTreeSet<String>,
8 pub refresh_source_revisions: bool,
10 pub ignore_locked_versions: bool,
12 pub environment: Option<String>,
14}
15
16#[derive(Debug, Clone, Default, PartialEq, Eq)]
17pub struct PackageResolutionContext {
18 pub preferred_version: Option<String>,
19 pub offline: bool,
20}
21
22impl PackageResolutionContext {
23 pub fn from_lockfile(
24 lockfile: Option<&Lockfile>,
25 package_name: &str,
26 options: &ResolveOptions,
27 ) -> Self {
28 let preferred_version =
29 if options.ignore_locked_versions || options.unlocked_packages.contains(package_name) {
30 None
31 } else {
32 lockfile.and_then(|lockfile| {
33 lockfile
34 .package
35 .iter()
36 .find(|package| package.name == package_name)
37 .map(|package| package.version.clone())
38 })
39 };
40 Self {
41 preferred_version,
42 offline: options.offline,
43 }
44 }
45}