@@ -1496,35 +1496,39 @@ impl VirtualProject {
14961496/// A target that can be installed.
14971497#[ derive( Debug , Copy , Clone ) ]
14981498pub enum InstallTarget < ' env > {
1499+ /// An entire workspace.
1500+ Workspace ( & ' env Workspace ) ,
1501+ /// A (legacy) non-project workspace root.
1502+ NonProjectWorkspace ( & ' env Workspace ) ,
14991503 /// A project (which could be a workspace root or member).
15001504 Project ( & ' env ProjectWorkspace ) ,
1501- /// A (legacy) non-project workspace root.
1502- NonProject ( & ' env Workspace ) ,
15031505 /// A frozen member within a [`Workspace`].
1504- FrozenMember ( & ' env Workspace , & ' env PackageName ) ,
1506+ FrozenProject ( & ' env Workspace , & ' env PackageName ) ,
15051507}
15061508
15071509impl < ' env > InstallTarget < ' env > {
15081510 /// Create an [`InstallTarget`] for a frozen member within a workspace.
1509- pub fn frozen_member ( project : & ' env VirtualProject , package_name : & ' env PackageName ) -> Self {
1510- Self :: FrozenMember ( project. workspace ( ) , package_name)
1511+ pub fn frozen ( project : & ' env VirtualProject , package_name : & ' env PackageName ) -> Self {
1512+ Self :: FrozenProject ( project. workspace ( ) , package_name)
15111513 }
15121514
15131515 /// Return the [`Workspace`] of the target.
15141516 pub fn workspace ( & self ) -> & Workspace {
15151517 match self {
1518+ Self :: Workspace ( workspace) => workspace,
15161519 Self :: Project ( project) => project. workspace ( ) ,
1517- Self :: NonProject ( workspace) => workspace,
1518- Self :: FrozenMember ( workspace, _) => workspace,
1520+ Self :: NonProjectWorkspace ( workspace) => workspace,
1521+ Self :: FrozenProject ( workspace, _) => workspace,
15191522 }
15201523 }
15211524
15221525 /// Return the [`PackageName`] of the target.
15231526 pub fn packages ( & self ) -> impl Iterator < Item = & PackageName > {
15241527 match self {
1528+ Self :: Workspace ( workspace) => Either :: Right ( workspace. packages ( ) . keys ( ) ) ,
15251529 Self :: Project ( project) => Either :: Left ( std:: iter:: once ( project. project_name ( ) ) ) ,
1526- Self :: NonProject ( workspace) => Either :: Right ( workspace. packages ( ) . keys ( ) ) ,
1527- Self :: FrozenMember ( _, package_name) => Either :: Left ( std:: iter:: once ( * package_name) ) ,
1530+ Self :: NonProjectWorkspace ( workspace) => Either :: Right ( workspace. packages ( ) . keys ( ) ) ,
1531+ Self :: FrozenProject ( _, package_name) => Either :: Left ( std:: iter:: once ( * package_name) ) ,
15281532 }
15291533 }
15301534
@@ -1540,8 +1544,8 @@ impl<'env> InstallTarget<'env> {
15401544 DependencyGroupError ,
15411545 > {
15421546 match self {
1543- Self :: Project ( _) | Self :: FrozenMember ( ..) => Ok ( BTreeMap :: new ( ) ) ,
1544- Self :: NonProject ( workspace) => {
1547+ Self :: Workspace ( _ ) | Self :: Project ( _) | Self :: FrozenProject ( ..) => Ok ( BTreeMap :: new ( ) ) ,
1548+ Self :: NonProjectWorkspace ( workspace) => {
15451549 // For non-projects, we might have `dependency-groups` or `tool.uv.dev-dependencies`
15461550 // that are attached to the workspace root (which isn't a member).
15471551
@@ -1591,18 +1595,24 @@ impl<'env> InstallTarget<'env> {
15911595 /// Return the [`PackageName`] of the target, if available.
15921596 pub fn project_name ( & self ) -> Option < & PackageName > {
15931597 match self {
1598+ Self :: Workspace ( _) => None ,
15941599 Self :: Project ( project) => Some ( project. project_name ( ) ) ,
1595- Self :: NonProject ( _) => None ,
1596- Self :: FrozenMember ( _, package_name) => Some ( package_name) ,
1600+ Self :: NonProjectWorkspace ( _) => None ,
1601+ Self :: FrozenProject ( _, package_name) => Some ( package_name) ,
1602+ }
1603+ }
1604+
1605+ pub fn from_workspace ( workspace : & ' env VirtualProject ) -> Self {
1606+ match workspace {
1607+ VirtualProject :: Project ( project) => Self :: Workspace ( project. workspace ( ) ) ,
1608+ VirtualProject :: NonProject ( workspace) => Self :: NonProjectWorkspace ( workspace) ,
15971609 }
15981610 }
1599- }
16001611
1601- impl < ' env > From < & ' env VirtualProject > for InstallTarget < ' env > {
1602- fn from ( project : & ' env VirtualProject ) -> Self {
1612+ pub fn from_project ( project : & ' env VirtualProject ) -> Self {
16031613 match project {
16041614 VirtualProject :: Project ( project) => Self :: Project ( project) ,
1605- VirtualProject :: NonProject ( workspace) => Self :: NonProject ( workspace) ,
1615+ VirtualProject :: NonProject ( workspace) => Self :: NonProjectWorkspace ( workspace) ,
16061616 }
16071617 }
16081618}
0 commit comments