From 4f5e1d31fe50d177e622f625ce4ee925cd5cd701 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 21:58:59 +0200 Subject: [PATCH 01/18] Simplify error message --- crates/fj-core/src/validate/sketch.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index c44495cd5..d94554a83 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -38,7 +38,7 @@ impl Validate for Sketch { #[derive(Clone, Debug, thiserror::Error)] pub enum SketchValidationError { /// Object within sketch referenced by more than one other object - #[error("Object within sketch referenced by more than one other Object")] + #[error(transparent)] ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), /// Region within sketch has exterior cycle with clockwise winding From ae9291bce8da81d7275ec520bb238456322b1acc Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 21:59:28 +0200 Subject: [PATCH 02/18] Update doc comment --- crates/fj-core/src/validate/sketch.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index d94554a83..14f01adc7 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -37,7 +37,7 @@ impl Validate for Sketch { /// [`Sketch`] validation failed #[derive(Clone, Debug, thiserror::Error)] pub enum SketchValidationError { - /// Object within sketch referenced by more than one other object + /// An object that should be exclusively owned by another, is not #[error(transparent)] ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), From 33850d4df572446a452f9abe344501131c359154 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:01:14 +0200 Subject: [PATCH 03/18] Add missing doc comments --- crates/fj-core/src/validate/references.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index e5cd04fab..e9b19e496 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -52,21 +52,25 @@ pub enum ObjectNotExclusivelyOwned { /// [`Region`] referenced by more than one [`Face`] #[error(transparent)] Region { + /// The invalid references references: MultipleReferences, }, /// [`Face`] referenced by more than one [`Shell`] #[error(transparent)] Face { + /// The invalid references references: MultipleReferences, }, /// [`HalfEdge`] referenced by more than one [`Cycle`] #[error(transparent)] HalfEdge { + /// The invalid references references: MultipleReferences, }, /// [`Cycle`] referenced by more than one [`Region`] #[error(transparent)] Cycle { + /// The invalid references references: MultipleReferences, }, } From f7978bf0ee1dcf244ad57483a4acebb9be40a41d Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:01:21 +0200 Subject: [PATCH 04/18] Re-export `ObjectNotExclusivelyOwned` --- crates/fj-core/src/validate/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/fj-core/src/validate/mod.rs b/crates/fj-core/src/validate/mod.rs index f9c07e135..85444da49 100644 --- a/crates/fj-core/src/validate/mod.rs +++ b/crates/fj-core/src/validate/mod.rs @@ -78,7 +78,10 @@ use crate::{ validation::{ValidationConfig, ValidationError}, }; -pub use self::{sketch::SketchValidationError, solid::SolidValidationError}; +pub use self::{ + references::ObjectNotExclusivelyOwned, sketch::SketchValidationError, + solid::SolidValidationError, +}; /// Assert that some object has a validation error which matches a specific /// pattern. This is preferred to matching on [`Validate::validate_and_return_first_error`], since usually we don't care about the order. From 10b80ea5eb6f631711aa2b59311174b2fe94cc3f Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:04:15 +0200 Subject: [PATCH 05/18] Update validation error variant name --- crates/fj-core/src/validate/solid.rs | 34 +++++++++++++++++----------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 031d93199..402899eb1 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -70,7 +70,7 @@ pub enum SolidValidationError { /// Object within solid referenced by more than one other object #[error("Object within solid referenced by more than one other Object")] - MultipleReferences(#[from] ObjectNotExclusivelyOwned), + ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), } impl SolidValidationError { @@ -238,9 +238,11 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid(SolidValidationError::MultipleReferences( - ObjectNotExclusivelyOwned::Face { references: _ } - )) + ValidationError::Solid( + SolidValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Face { references: _ } + ) + ) ); let valid_solid = Solid::new(vec![]).insert(&mut core); @@ -284,9 +286,11 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid(SolidValidationError::MultipleReferences( - ObjectNotExclusivelyOwned::Region { references: _ } - )) + ValidationError::Solid( + SolidValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Region { references: _ } + ) + ) ); let valid_solid = Solid::new(vec![]).insert(&mut core); @@ -334,9 +338,11 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid(SolidValidationError::MultipleReferences( - ObjectNotExclusivelyOwned::Cycle { references: _ } - )) + ValidationError::Solid( + SolidValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Cycle { references: _ } + ) + ) ); let valid_solid = Solid::new(vec![]).insert(&mut core); @@ -376,9 +382,11 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid(SolidValidationError::MultipleReferences( - ObjectNotExclusivelyOwned::HalfEdge { references: _ } - )) + ValidationError::Solid( + SolidValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::HalfEdge { references: _ } + ) + ) ); let valid_solid = Solid::new(vec![]).insert(&mut core); From d612c0dba31b34bc6b00c8bdbde94bc48a105c60 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:04:34 +0200 Subject: [PATCH 06/18] Simplify error message --- crates/fj-core/src/validate/solid.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 402899eb1..75dc1f447 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -69,7 +69,7 @@ pub enum SolidValidationError { }, /// Object within solid referenced by more than one other object - #[error("Object within solid referenced by more than one other Object")] + #[error(transparent)] ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), } From e92123b0a88ecdbe83d1cd509f2498999d9cb58b Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:05:43 +0200 Subject: [PATCH 07/18] Consolidate error variants in `ValidationError` --- crates/fj-core/src/validate/references.rs | 2 +- crates/fj-core/src/validate/sketch.rs | 16 +++--------- crates/fj-core/src/validate/solid.rs | 31 +++++++---------------- crates/fj-core/src/validation/error.rs | 8 +++++- 4 files changed, 21 insertions(+), 36 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index e9b19e496..b3067a39a 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -36,7 +36,7 @@ macro_rules! validate_references { $( $counter.find_multiples().iter().for_each(|multiple| { let reference_error = ObjectNotExclusivelyOwned::$err { references: multiple.clone() }; - $errors.push(Into::<$error_ty>::into(reference_error).into()); + $errors.push(reference_error.into()); }); )* }; diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index 14f01adc7..de1ba73a0 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -37,10 +37,6 @@ impl Validate for Sketch { /// [`Sketch`] validation failed #[derive(Clone, Debug, thiserror::Error)] pub enum SketchValidationError { - /// An object that should be exclusively owned by another, is not - #[error(transparent)] - ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), - /// Region within sketch has exterior cycle with clockwise winding #[error( "Exterior cycle within sketch region has clockwise winding\n @@ -170,10 +166,8 @@ mod tests { assert_contains_err!( core, invalid_sketch, - ValidationError::Sketch( - SketchValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Cycle { references: _ } - ) + ValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Cycle { references: _ } ) ); @@ -210,10 +204,8 @@ mod tests { assert_contains_err!( core, invalid_sketch, - ValidationError::Sketch( - SketchValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::HalfEdge { references: _ } - ) + ValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::HalfEdge { references: _ } ) ); diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 75dc1f447..12ac72228 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -67,10 +67,6 @@ pub enum SolidValidationError { /// Position of second vertex position_b: Point<3>, }, - - /// Object within solid referenced by more than one other object - #[error(transparent)] - ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), } impl SolidValidationError { @@ -188,8 +184,7 @@ mod tests { }, topology::{Cycle, Face, HalfEdge, Region, Shell, Solid, Surface}, validate::{ - references::ObjectNotExclusivelyOwned, SolidValidationError, - Validate, ValidationError, + references::ObjectNotExclusivelyOwned, Validate, ValidationError, }, Core, }; @@ -238,10 +233,8 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid( - SolidValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Face { references: _ } - ) + ValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Face { references: _ } ) ); @@ -286,10 +279,8 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid( - SolidValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Region { references: _ } - ) + ValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Region { references: _ } ) ); @@ -338,10 +329,8 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid( - SolidValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Cycle { references: _ } - ) + ValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::Cycle { references: _ } ) ); @@ -382,10 +371,8 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::Solid( - SolidValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::HalfEdge { references: _ } - ) + ValidationError::ObjectNotExclusivelyOwned( + ObjectNotExclusivelyOwned::HalfEdge { references: _ } ) ); diff --git a/crates/fj-core/src/validation/error.rs b/crates/fj-core/src/validation/error.rs index 0b75cce32..5a4335fb7 100644 --- a/crates/fj-core/src/validation/error.rs +++ b/crates/fj-core/src/validation/error.rs @@ -1,6 +1,8 @@ use std::{convert::Infallible, fmt}; -use crate::validate::{SketchValidationError, SolidValidationError}; +use crate::validate::{ + ObjectNotExclusivelyOwned, SketchValidationError, SolidValidationError, +}; use super::checks::{ AdjacentHalfEdgesNotConnected, CoincidentHalfEdgesAreNotSiblings, @@ -37,6 +39,10 @@ pub enum ValidationError { #[error(transparent)] InteriorCycleHasInvalidWinding(#[from] InteriorCycleHasInvalidWinding), + /// An object that should be exclusively owned by another, is not + #[error(transparent)] + ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), + /// `Solid` validation error #[error("`Solid` validation error")] Solid(#[from] SolidValidationError), From 8b7a60d788779ccecb3aa8a77f85123fdade29ad Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:13:27 +0200 Subject: [PATCH 08/18] Update formatting --- crates/fj-core/src/validate/references.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index b3067a39a..aec7a865e 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -55,18 +55,21 @@ pub enum ObjectNotExclusivelyOwned { /// The invalid references references: MultipleReferences, }, + /// [`Face`] referenced by more than one [`Shell`] #[error(transparent)] Face { /// The invalid references references: MultipleReferences, }, + /// [`HalfEdge`] referenced by more than one [`Cycle`] #[error(transparent)] HalfEdge { /// The invalid references references: MultipleReferences, }, + /// [`Cycle`] referenced by more than one [`Region`] #[error(transparent)] Cycle { From d514a2fa1d98e4a8981333df979aaddea531ffa6 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:13:43 +0200 Subject: [PATCH 09/18] Make enum variant name more explicit --- crates/fj-core/src/validate/references.rs | 2 +- crates/fj-core/src/validate/solid.rs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index aec7a865e..e03516c9f 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -51,7 +51,7 @@ macro_rules! validate_references { pub enum ObjectNotExclusivelyOwned { /// [`Region`] referenced by more than one [`Face`] #[error(transparent)] - Region { + MultipleReferencesToRegion { /// The invalid references references: MultipleReferences, }, diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 12ac72228..34f972be3 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -165,7 +165,7 @@ impl SolidValidationError { validate_references!( errors, SolidValidationError; - referenced_regions, Region; + referenced_regions, MultipleReferencesToRegion; referenced_faces, Face; referenced_edges, HalfEdge; referenced_cycles, Cycle; @@ -280,7 +280,9 @@ mod tests { core, invalid_solid, ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Region { references: _ } + ObjectNotExclusivelyOwned::MultipleReferencesToRegion { + references: _ + } ) ); From 9e245450b1156b01da043d484d60b40c883c04f0 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:13:43 +0200 Subject: [PATCH 10/18] Make enum variant name more explicit --- crates/fj-core/src/validate/references.rs | 2 +- crates/fj-core/src/validate/solid.rs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index e03516c9f..6e4c20ebc 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -58,7 +58,7 @@ pub enum ObjectNotExclusivelyOwned { /// [`Face`] referenced by more than one [`Shell`] #[error(transparent)] - Face { + MultipleReferencesToFace { /// The invalid references references: MultipleReferences, }, diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 34f972be3..2f0e811fb 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -166,7 +166,7 @@ impl SolidValidationError { validate_references!( errors, SolidValidationError; referenced_regions, MultipleReferencesToRegion; - referenced_faces, Face; + referenced_faces, MultipleReferencesToFace; referenced_edges, HalfEdge; referenced_cycles, Cycle; ); @@ -234,7 +234,9 @@ mod tests { core, invalid_solid, ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Face { references: _ } + ObjectNotExclusivelyOwned::MultipleReferencesToFace { + references: _ + } ) ); From dab385196213d76212d560de6c7469bd27373a98 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:13:43 +0200 Subject: [PATCH 11/18] Make enum variant name more explicit --- crates/fj-core/src/validate/references.rs | 2 +- crates/fj-core/src/validate/sketch.rs | 6 ++++-- crates/fj-core/src/validate/solid.rs | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index 6e4c20ebc..d067087c9 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -65,7 +65,7 @@ pub enum ObjectNotExclusivelyOwned { /// [`HalfEdge`] referenced by more than one [`Cycle`] #[error(transparent)] - HalfEdge { + MultipleReferencesToHalfEdge { /// The invalid references references: MultipleReferences, }, diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index de1ba73a0..08e9d9cae 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -78,7 +78,7 @@ impl SketchValidationError { validate_references!( errors, SketchValidationError; - referenced_edges, HalfEdge; + referenced_edges, MultipleReferencesToHalfEdge; referenced_cycles, Cycle; ); } @@ -205,7 +205,9 @@ mod tests { core, invalid_sketch, ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::HalfEdge { references: _ } + ObjectNotExclusivelyOwned::MultipleReferencesToHalfEdge { + references: _ + } ) ); diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 2f0e811fb..b63d8f644 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -167,7 +167,7 @@ impl SolidValidationError { errors, SolidValidationError; referenced_regions, MultipleReferencesToRegion; referenced_faces, MultipleReferencesToFace; - referenced_edges, HalfEdge; + referenced_edges, MultipleReferencesToHalfEdge; referenced_cycles, Cycle; ); } @@ -376,7 +376,9 @@ mod tests { core, invalid_solid, ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::HalfEdge { references: _ } + ObjectNotExclusivelyOwned::MultipleReferencesToHalfEdge { + references: _ + } ) ); From 8f75a72b001dbe71ff1b37efcb25749c6cd3dbae Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:13:43 +0200 Subject: [PATCH 12/18] Make enum variant name more explicit --- crates/fj-core/src/validate/references.rs | 2 +- crates/fj-core/src/validate/sketch.rs | 6 ++++-- crates/fj-core/src/validate/solid.rs | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index d067087c9..a39554294 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -72,7 +72,7 @@ pub enum ObjectNotExclusivelyOwned { /// [`Cycle`] referenced by more than one [`Region`] #[error(transparent)] - Cycle { + MultipleReferencesToCycle { /// The invalid references references: MultipleReferences, }, diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index 08e9d9cae..d1942b4e8 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -79,7 +79,7 @@ impl SketchValidationError { validate_references!( errors, SketchValidationError; referenced_edges, MultipleReferencesToHalfEdge; - referenced_cycles, Cycle; + referenced_cycles, MultipleReferencesToCycle; ); } @@ -167,7 +167,9 @@ mod tests { core, invalid_sketch, ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Cycle { references: _ } + ObjectNotExclusivelyOwned::MultipleReferencesToCycle { + references: _ + } ) ); diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index b63d8f644..8b681afa9 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -168,7 +168,7 @@ impl SolidValidationError { referenced_regions, MultipleReferencesToRegion; referenced_faces, MultipleReferencesToFace; referenced_edges, MultipleReferencesToHalfEdge; - referenced_cycles, Cycle; + referenced_cycles, MultipleReferencesToCycle; ); } } @@ -334,7 +334,9 @@ mod tests { core, invalid_solid, ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::Cycle { references: _ } + ObjectNotExclusivelyOwned::MultipleReferencesToCycle { + references: _ + } ) ); From 11857d16d82de39221196e37dde49fb88fbfbd52 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:15:29 +0200 Subject: [PATCH 13/18] Update doc comments --- crates/fj-core/src/validate/references.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index a39554294..406a88d2e 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -49,28 +49,28 @@ macro_rules! validate_references { /// object graph. #[derive(Clone, Debug, thiserror::Error)] pub enum ObjectNotExclusivelyOwned { - /// [`Region`] referenced by more than one [`Face`] + /// Multiple references to [`Region`] #[error(transparent)] MultipleReferencesToRegion { /// The invalid references references: MultipleReferences, }, - /// [`Face`] referenced by more than one [`Shell`] + /// Multiple references to [`Face`] #[error(transparent)] MultipleReferencesToFace { /// The invalid references references: MultipleReferences, }, - /// [`HalfEdge`] referenced by more than one [`Cycle`] + /// Multiple references to [`HalfEdge`] #[error(transparent)] MultipleReferencesToHalfEdge { /// The invalid references references: MultipleReferences, }, - /// [`Cycle`] referenced by more than one [`Region`] + /// Multiple references to [`Cycle`] #[error(transparent)] MultipleReferencesToCycle { /// The invalid references From 4ea6aec16231708265f439406cd1c10686d9a7f4 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:22:15 +0200 Subject: [PATCH 14/18] Move error variants to `ValidationError` This makes it possible to further simplify `ObjectNotExclusivelyOwned` in a next step. --- crates/fj-core/src/validate/references.rs | 39 ++++------------------- crates/fj-core/src/validate/sketch.rs | 17 ++-------- crates/fj-core/src/validate/solid.rs | 28 +++------------- crates/fj-core/src/validation/error.rs | 23 ++++++++++--- 4 files changed, 33 insertions(+), 74 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index 406a88d2e..03f3062e9 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -1,9 +1,6 @@ use std::{any::type_name_of_val, collections::HashMap, fmt}; -use crate::{ - storage::Handle, - topology::{Cycle, Face, HalfEdge, Region, Shell}, -}; +use crate::storage::Handle; #[derive(Default)] pub struct ReferenceCounter(HashMap, Vec>>); @@ -35,7 +32,7 @@ macro_rules! validate_references { ($errors:ident, $error_ty:ty;$($counter:ident, $err:ident;)*) => { $( $counter.find_multiples().iter().for_each(|multiple| { - let reference_error = ObjectNotExclusivelyOwned::$err { references: multiple.clone() }; + let reference_error = ValidationError::$err(ObjectNotExclusivelyOwned{ references: multiple.clone() }); $errors.push(reference_error.into()); }); )* @@ -48,34 +45,10 @@ macro_rules! validate_references { /// that only one reference to these objects must exist within the topological /// object graph. #[derive(Clone, Debug, thiserror::Error)] -pub enum ObjectNotExclusivelyOwned { - /// Multiple references to [`Region`] - #[error(transparent)] - MultipleReferencesToRegion { - /// The invalid references - references: MultipleReferences, - }, - - /// Multiple references to [`Face`] - #[error(transparent)] - MultipleReferencesToFace { - /// The invalid references - references: MultipleReferences, - }, - - /// Multiple references to [`HalfEdge`] - #[error(transparent)] - MultipleReferencesToHalfEdge { - /// The invalid references - references: MultipleReferences, - }, - - /// Multiple references to [`Cycle`] - #[error(transparent)] - MultipleReferencesToCycle { - /// The invalid references - references: MultipleReferences, - }, +#[error(transparent)] +pub struct ObjectNotExclusivelyOwned { + /// The invalid references + pub references: MultipleReferences, } #[derive(Clone, Debug, thiserror::Error)] diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index d1942b4e8..49fc9c5dc 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -131,10 +131,7 @@ mod tests { build::BuildHalfEdge, build::BuildRegion, insert::Insert, }, topology::{Cycle, HalfEdge, Region, Sketch, Vertex}, - validate::{ - references::ObjectNotExclusivelyOwned, SketchValidationError, - Validate, ValidationError, - }, + validate::{SketchValidationError, Validate, ValidationError}, Core, }; @@ -166,11 +163,7 @@ mod tests { assert_contains_err!( core, invalid_sketch, - ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::MultipleReferencesToCycle { - references: _ - } - ) + ValidationError::MultipleReferencesToCycle(_) ); Ok(()) @@ -206,11 +199,7 @@ mod tests { assert_contains_err!( core, invalid_sketch, - ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::MultipleReferencesToHalfEdge { - references: _ - } - ) + ValidationError::MultipleReferencesToHalfEdge(_) ); Ok(()) diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 8b681afa9..10db3c40c 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -183,9 +183,7 @@ mod tests { insert::Insert, }, topology::{Cycle, Face, HalfEdge, Region, Shell, Solid, Surface}, - validate::{ - references::ObjectNotExclusivelyOwned, Validate, ValidationError, - }, + validate::{Validate, ValidationError}, Core, }; @@ -233,11 +231,7 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::MultipleReferencesToFace { - references: _ - } - ) + ValidationError::MultipleReferencesToFace(_) ); let valid_solid = Solid::new(vec![]).insert(&mut core); @@ -281,11 +275,7 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::MultipleReferencesToRegion { - references: _ - } - ) + ValidationError::MultipleReferencesToRegion(_) ); let valid_solid = Solid::new(vec![]).insert(&mut core); @@ -333,11 +323,7 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::MultipleReferencesToCycle { - references: _ - } - ) + ValidationError::MultipleReferencesToCycle(_) ); let valid_solid = Solid::new(vec![]).insert(&mut core); @@ -377,11 +363,7 @@ mod tests { assert_contains_err!( core, invalid_solid, - ValidationError::ObjectNotExclusivelyOwned( - ObjectNotExclusivelyOwned::MultipleReferencesToHalfEdge { - references: _ - } - ) + ValidationError::MultipleReferencesToHalfEdge(_) ); let valid_solid = Solid::new(vec![]).insert(&mut core); diff --git a/crates/fj-core/src/validation/error.rs b/crates/fj-core/src/validation/error.rs index 5a4335fb7..c054953cd 100644 --- a/crates/fj-core/src/validation/error.rs +++ b/crates/fj-core/src/validation/error.rs @@ -1,7 +1,10 @@ use std::{convert::Infallible, fmt}; -use crate::validate::{ - ObjectNotExclusivelyOwned, SketchValidationError, SolidValidationError, +use crate::{ + topology::{Cycle, Face, HalfEdge, Region, Shell}, + validate::{ + ObjectNotExclusivelyOwned, SketchValidationError, SolidValidationError, + }, }; use super::checks::{ @@ -39,9 +42,21 @@ pub enum ValidationError { #[error(transparent)] InteriorCycleHasInvalidWinding(#[from] InteriorCycleHasInvalidWinding), - /// An object that should be exclusively owned by another, is not + /// Multiple references to [`Cycle`] #[error(transparent)] - ObjectNotExclusivelyOwned(#[from] ObjectNotExclusivelyOwned), + MultipleReferencesToCycle(ObjectNotExclusivelyOwned), + + /// Multiple references to [`Face`] + #[error(transparent)] + MultipleReferencesToFace(ObjectNotExclusivelyOwned), + + /// Multiple references to [`HalfEdge`] + #[error(transparent)] + MultipleReferencesToHalfEdge(ObjectNotExclusivelyOwned), + + /// Multiple references to [`Region`] + #[error(transparent)] + MultipleReferencesToRegion(ObjectNotExclusivelyOwned), /// `Solid` validation error #[error("`Solid` validation error")] From cf977a73461f34c25f131ae82f8f4b07f4f84a0b Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:24:38 +0200 Subject: [PATCH 15/18] Refactor to prepare for follow-on change --- crates/fj-core/src/validate/references.rs | 12 +++++++----- crates/fj-core/src/validate/sketch.rs | 3 +-- crates/fj-core/src/validate/solid.rs | 3 +-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index 03f3062e9..7e8b6cfeb 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -14,13 +14,15 @@ impl ReferenceCounter { self.0.entry(to).or_default().push(from); } - pub fn find_multiples(&self) -> Vec> { + pub fn find_multiples(&self) -> Vec> { self.0 .iter() .filter(|(_, referenced_by)| referenced_by.len() > 1) - .map(|(object, referenced_by)| MultipleReferences { - object: object.clone(), - referenced_by: referenced_by.to_vec(), + .map(|(object, referenced_by)| ObjectNotExclusivelyOwned { + references: MultipleReferences { + object: object.clone(), + referenced_by: referenced_by.to_vec(), + }, }) .collect() } @@ -32,7 +34,7 @@ macro_rules! validate_references { ($errors:ident, $error_ty:ty;$($counter:ident, $err:ident;)*) => { $( $counter.find_multiples().iter().for_each(|multiple| { - let reference_error = ValidationError::$err(ObjectNotExclusivelyOwned{ references: multiple.clone() }); + let reference_error = ValidationError::$err(multiple.clone()); $errors.push(reference_error.into()); }); )* diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index 49fc9c5dc..37f162521 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -9,8 +9,7 @@ use crate::{ }; use super::{ - references::{ObjectNotExclusivelyOwned, ReferenceCounter}, - Validate, ValidationConfig, ValidationError, + references::ReferenceCounter, Validate, ValidationConfig, ValidationError, }; impl Validate for Sketch { diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index 10db3c40c..a85f51568 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -9,8 +9,7 @@ use crate::{ use fj_math::Point; use super::{ - references::{ObjectNotExclusivelyOwned, ReferenceCounter}, - Validate, ValidationConfig, ValidationError, + references::ReferenceCounter, Validate, ValidationConfig, ValidationError, }; impl Validate for Solid { From e64bc241f4bab191b83a7e95d27331878bbf908c Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:25:08 +0200 Subject: [PATCH 16/18] Merge redundant structs --- crates/fj-core/src/validate/references.rs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index 7e8b6cfeb..8add684b5 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -19,10 +19,8 @@ impl ReferenceCounter { .iter() .filter(|(_, referenced_by)| referenced_by.len() > 1) .map(|(object, referenced_by)| ObjectNotExclusivelyOwned { - references: MultipleReferences { - object: object.clone(), - referenced_by: referenced_by.to_vec(), - }, + object: object.clone(), + referenced_by: referenced_by.to_vec(), }) .collect() } @@ -47,19 +45,12 @@ macro_rules! validate_references { /// that only one reference to these objects must exist within the topological /// object graph. #[derive(Clone, Debug, thiserror::Error)] -#[error(transparent)] pub struct ObjectNotExclusivelyOwned { - /// The invalid references - pub references: MultipleReferences, -} - -#[derive(Clone, Debug, thiserror::Error)] -pub struct MultipleReferences { object: Handle, referenced_by: Vec>, } -impl fmt::Display for MultipleReferences +impl fmt::Display for ObjectNotExclusivelyOwned where T: fmt::Debug, U: fmt::Debug, From 40a85afa4f151513824673e431f73b65a7213d86 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:26:04 +0200 Subject: [PATCH 17/18] Remove unused macro parameter --- crates/fj-core/src/validate/references.rs | 2 +- crates/fj-core/src/validate/sketch.rs | 2 +- crates/fj-core/src/validate/solid.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index 8add684b5..ca121633a 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -29,7 +29,7 @@ impl ReferenceCounter { /// Find errors and convert to [`crate::validate::ValidationError`] #[macro_export] macro_rules! validate_references { - ($errors:ident, $error_ty:ty;$($counter:ident, $err:ident;)*) => { + ($errors:ident;$($counter:ident, $err:ident;)*) => { $( $counter.find_multiples().iter().for_each(|multiple| { let reference_error = ValidationError::$err(multiple.clone()); diff --git a/crates/fj-core/src/validate/sketch.rs b/crates/fj-core/src/validate/sketch.rs index 37f162521..9d5f64f45 100644 --- a/crates/fj-core/src/validate/sketch.rs +++ b/crates/fj-core/src/validate/sketch.rs @@ -76,7 +76,7 @@ impl SketchValidationError { }); validate_references!( - errors, SketchValidationError; + errors; referenced_edges, MultipleReferencesToHalfEdge; referenced_cycles, MultipleReferencesToCycle; ); diff --git a/crates/fj-core/src/validate/solid.rs b/crates/fj-core/src/validate/solid.rs index a85f51568..75c1df518 100644 --- a/crates/fj-core/src/validate/solid.rs +++ b/crates/fj-core/src/validate/solid.rs @@ -163,7 +163,7 @@ impl SolidValidationError { }); validate_references!( - errors, SolidValidationError; + errors; referenced_regions, MultipleReferencesToRegion; referenced_faces, MultipleReferencesToFace; referenced_edges, MultipleReferencesToHalfEdge; From 3c09fe54bdcb5446d3ab02b464f99cbe127db096 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 24 May 2024 22:27:20 +0200 Subject: [PATCH 18/18] Move most important type to top of module --- crates/fj-core/src/validate/references.rs | 56 +++++++++++------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/crates/fj-core/src/validate/references.rs b/crates/fj-core/src/validate/references.rs index ca121633a..9606997a8 100644 --- a/crates/fj-core/src/validate/references.rs +++ b/crates/fj-core/src/validate/references.rs @@ -2,6 +2,34 @@ use std::{any::type_name_of_val, collections::HashMap, fmt}; use crate::storage::Handle; +/// Object that should be exclusively owned by another, is not +/// +/// Some objects are expected to be "owned" by a single other object. This means +/// that only one reference to these objects must exist within the topological +/// object graph. +#[derive(Clone, Debug, thiserror::Error)] +pub struct ObjectNotExclusivelyOwned { + object: Handle, + referenced_by: Vec>, +} + +impl fmt::Display for ObjectNotExclusivelyOwned +where + T: fmt::Debug, + U: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "`{}` ({:?}) referenced by multiple `{}` objects ({:?})", + type_name_of_val(&self.object), + self.object, + type_name_of_val(&self.referenced_by), + self.referenced_by + ) + } +} + #[derive(Default)] pub struct ReferenceCounter(HashMap, Vec>>); @@ -38,31 +66,3 @@ macro_rules! validate_references { )* }; } - -/// Object that should be exclusively owned by another, is not -/// -/// Some objects are expected to be "owned" by a single other object. This means -/// that only one reference to these objects must exist within the topological -/// object graph. -#[derive(Clone, Debug, thiserror::Error)] -pub struct ObjectNotExclusivelyOwned { - object: Handle, - referenced_by: Vec>, -} - -impl fmt::Display for ObjectNotExclusivelyOwned -where - T: fmt::Debug, - U: fmt::Debug, -{ - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( - f, - "`{}` ({:?}) referenced by multiple `{}` objects ({:?})", - type_name_of_val(&self.object), - self.object, - type_name_of_val(&self.referenced_by), - self.referenced_by - ) - } -}