Skip to main content

uv_configuration/
editable.rs

1use uv_normalize::PackageName;
2
3#[derive(Debug, Default, Clone, PartialEq, Eq)]
4pub enum EditableMode {
5    #[default]
6    Editable,
7    NonEditable,
8    NonEditablePackages(Vec<PackageName>),
9}
10
11impl From<bool> for EditableMode {
12    fn from(value: bool) -> Self {
13        if value {
14            Self::Editable
15        } else {
16            Self::NonEditable
17        }
18    }
19}
20
21impl EditableMode {
22    /// Determine the editable installation strategy to use for the given arguments.
23    pub fn from_args(
24        editable: Option<bool>,
25        no_editable_package: Vec<PackageName>,
26    ) -> Option<Self> {
27        match editable {
28            Some(editable) => Some(Self::from(editable)),
29            None if no_editable_package.is_empty() => None,
30            None => Some(Self::NonEditablePackages(no_editable_package)),
31        }
32    }
33
34    /// Return the editable override for a specific package, if any.
35    pub fn for_package(&self, package_name: &PackageName) -> Option<bool> {
36        match self {
37            Self::Editable => Some(true),
38            Self::NonEditable => Some(false),
39            Self::NonEditablePackages(packages) if packages.contains(package_name) => Some(false),
40            Self::NonEditablePackages(_) => None,
41        }
42    }
43}