From db30b3fc68062eccada569829a4fb8048a260494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Sm=C3=B3=C5=82ka?= Date: Tue, 21 Jan 2025 17:37:13 +0100 Subject: [PATCH] Distinguish between library and plugin IDs in component dependencies commit-id:8452ee94 --- scarb/src/compiler/compilation_unit.rs | 27 ++++++++++++++++---------- scarb/src/ops/resolve.rs | 8 ++++---- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/scarb/src/compiler/compilation_unit.rs b/scarb/src/compiler/compilation_unit.rs index 12758d409..a8bf9fb7d 100644 --- a/scarb/src/compiler/compilation_unit.rs +++ b/scarb/src/compiler/compilation_unit.rs @@ -111,17 +111,26 @@ pub struct CompilationUnitCairoPlugin { /// Currently, a compilation unit can be uniquely identified by [`PackageId`] only. /// It may be not sufficient in the future depending on changes to the compilation model. #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -pub struct CompilationUnitComponentId { - pub package_id: PackageId, +pub enum CompilationUnitComponentId { + Library(PackageId), + Plugin(PackageId), } impl CompilationUnitComponentId { + /// Extracts the underlying `PackageId` regardless of the variant. + pub fn package_id(&self) -> PackageId { + match self { + CompilationUnitComponentId::Library(package_id) => *package_id, + CompilationUnitComponentId::Plugin(package_id) => *package_id, + } + } + pub fn to_metadata_component_id(&self) -> scarb_metadata::CompilationUnitComponentId { - self.package_id.to_serialized_string().into() + self.package_id().to_serialized_string().into() } pub fn to_discriminator(&self) -> Option { - if self.package_id.name == PackageName::CORE { + if self.package_id().name == PackageName::CORE { None } else { Some(self.to_crate_identifier().into()) @@ -129,7 +138,7 @@ impl CompilationUnitComponentId { } pub fn to_crate_identifier(&self) -> CrateIdentifier { - self.package_id.to_serialized_string().into() + self.package_id().to_serialized_string().into() } } @@ -289,8 +298,8 @@ impl CairoCompilationUnit { } impl CompilationUnitComponent { - /// Validate input and create new [CompilationUnitComponent] instance. - pub fn try_new( + /// Validate input and create new [CompilationUnitComponent] instance representing a library. + pub fn try_new_library( package: Package, targets: Vec, cfg_set: Option, @@ -329,9 +338,7 @@ impl CompilationUnitComponent { ); } Ok(Self { - id: CompilationUnitComponentId { - package_id: package.id, - }, + id: CompilationUnitComponentId::Library(package.id), package, targets, cfg_set, diff --git a/scarb/src/ops/resolve.rs b/scarb/src/ops/resolve.rs index dc38bcc72..742ba2c29 100644 --- a/scarb/src/ops/resolve.rs +++ b/scarb/src/ops/resolve.rs @@ -475,7 +475,7 @@ fn cairo_compilation_unit_for_target( } }; - CompilationUnitComponent::try_new(package, targets, cfg_set) + CompilationUnitComponent::try_new_library(package, targets, cfg_set) }) .collect::>()?; @@ -495,7 +495,7 @@ fn cairo_compilation_unit_for_target( }); // Add `lib` target for tested package, to be available as dependency. - components.push(CompilationUnitComponent::try_new( + components.push(CompilationUnitComponent::try_new_library( member.clone(), vec![target], get_cfg_with_features( @@ -722,7 +722,7 @@ impl<'a> PackageSolutionCollector<'a> { component: &CompilationUnitComponent, components: &[CompilationUnitComponent], ) -> Vec { - let package_id = component.id.package_id; + let package_id = component.id.package_id(); // Those are direct dependencies of the component. let dependencies_packages = self @@ -830,7 +830,7 @@ pub fn generate_cairo_plugin_compilation_units( .map(Arc::new), ) .flatten(); - let components = vec![CompilationUnitComponent::try_new( + let components = vec![CompilationUnitComponent::try_new_library( member.clone(), vec![member .fetch_target(&TargetKind::CAIRO_PLUGIN)