From 158ce3a34edee33d7ebc4723c4e902899f2604b5 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 27 Apr 2023 10:06:08 +0200 Subject: [PATCH 1/8] Improve wording in doc comment --- crates/fj-kernel/src/services/validation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index 5e0717a8f5..2d37bdc6b7 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -53,7 +53,7 @@ impl State for Validation { } } -/// An event produced by the validation service +/// The event produced by the validation service #[derive(Clone)] pub struct ValidationFailed { /// The object for which validation failed From 137c2d3e70542bb57dc5b78714d1150eee734105 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 27 Apr 2023 10:12:36 +0200 Subject: [PATCH 2/8] Add `ValidationCommand` This is preparation for the validation service to accept more commands. --- crates/fj-kernel/src/services/mod.rs | 7 +++++-- crates/fj-kernel/src/services/validation.rs | 21 ++++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/crates/fj-kernel/src/services/mod.rs b/crates/fj-kernel/src/services/mod.rs index 561a5acfc7..fda5868507 100644 --- a/crates/fj-kernel/src/services/mod.rs +++ b/crates/fj-kernel/src/services/mod.rs @@ -11,7 +11,7 @@ use crate::objects::{Object, Objects, WithHandle}; pub use self::{ objects::{InsertObject, Operation}, service::{Service, State}, - validation::{Validation, ValidationFailed}, + validation::{Validation, ValidationCommand, ValidationFailed}, }; /// The kernel services @@ -46,7 +46,10 @@ impl Services { .execute(Operation::InsertObject { object }, &mut object_events); for object_event in object_events { - self.validation.execute(object_event, &mut Vec::new()); + let command = ValidationCommand::ValidateObject { + object: object_event.object, + }; + self.validation.execute(command, &mut Vec::new()); } } } diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index 2d37bdc6b7..90cff079f1 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -1,12 +1,12 @@ use std::{collections::BTreeMap, thread}; use crate::{ - objects::{BehindHandle, Object}, + objects::{BehindHandle, Object, WithHandle}, storage::ObjectId, validate::ValidationError, }; -use super::{objects::InsertObject, State}; +use super::State; /// Errors that occurred while validating the objects inserted into the stores #[derive(Default)] @@ -33,16 +33,18 @@ impl Drop for Validation { } impl State for Validation { - type Command = InsertObject; + type Command = ValidationCommand; type Event = ValidationFailed; fn decide(&self, command: Self::Command, events: &mut Vec) { + let ValidationCommand::ValidateObject { object } = command; + let mut errors = Vec::new(); - command.object.validate(&mut errors); + object.validate(&mut errors); for err in errors { events.push(ValidationFailed { - object: command.object.clone().into(), + object: object.clone().into(), err, }); } @@ -53,6 +55,15 @@ impl State for Validation { } } +/// The command accepted by the validation service +pub enum ValidationCommand { + /// Validate the provided object + ValidateObject { + /// The object to validate + object: Object, + }, +} + /// The event produced by the validation service #[derive(Clone)] pub struct ValidationFailed { From e65c030472b48f42e4be7945bf998a5b0dd07b53 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 27 Apr 2023 10:29:41 +0200 Subject: [PATCH 3/8] Use more appropriate object type for validation --- crates/fj-kernel/src/objects/object.rs | 18 +++++++++--------- crates/fj-kernel/src/services/mod.rs | 2 +- crates/fj-kernel/src/services/validation.rs | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/fj-kernel/src/objects/object.rs b/crates/fj-kernel/src/objects/object.rs index 22c9d16f20..a538400090 100644 --- a/crates/fj-kernel/src/objects/object.rs +++ b/crates/fj-kernel/src/objects/object.rs @@ -31,6 +31,15 @@ macro_rules! object { )* } } + + /// Validate the object + pub fn validate(&self, errors: &mut Vec) { + match self { + $( + Self::$ty(object) => object.validate(errors), + )* + } + } } impl Object { @@ -47,15 +56,6 @@ macro_rules! object { )* } } - - /// Validate the object - pub fn validate(&self, errors: &mut Vec) { - match self { - $( - Self::$ty((_, object)) => object.validate(errors), - )* - } - } } impl From> for Object { diff --git a/crates/fj-kernel/src/services/mod.rs b/crates/fj-kernel/src/services/mod.rs index fda5868507..547a801370 100644 --- a/crates/fj-kernel/src/services/mod.rs +++ b/crates/fj-kernel/src/services/mod.rs @@ -47,7 +47,7 @@ impl Services { for object_event in object_events { let command = ValidationCommand::ValidateObject { - object: object_event.object, + object: object_event.object.into(), }; self.validation.execute(command, &mut Vec::new()); } diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index 90cff079f1..7eb3cdd9e7 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -1,7 +1,7 @@ use std::{collections::BTreeMap, thread}; use crate::{ - objects::{BehindHandle, Object, WithHandle}, + objects::{BehindHandle, Object}, storage::ObjectId, validate::ValidationError, }; @@ -44,7 +44,7 @@ impl State for Validation { for err in errors { events.push(ValidationFailed { - object: object.clone().into(), + object: object.clone(), err, }); } @@ -60,7 +60,7 @@ pub enum ValidationCommand { /// Validate the provided object ValidateObject { /// The object to validate - object: Object, + object: Object, }, } From 55ffa5d3a863dc9bc997119f4a8bfb911757c0c6 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 2 May 2023 11:41:30 +0200 Subject: [PATCH 4/8] Remove redundancy in `Validation` --- crates/fj-kernel/src/services/validation.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index 7eb3cdd9e7..6413f3f2e9 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -10,7 +10,7 @@ use super::State; /// Errors that occurred while validating the objects inserted into the stores #[derive(Default)] -pub struct Validation(pub BTreeMap); +pub struct Validation(pub BTreeMap); impl Drop for Validation { fn drop(&mut self) { @@ -22,7 +22,7 @@ impl Drop for Validation { ); for event in self.0.values() { - println!("{}", event.err); + println!("{}", event); } if !thread::panicking() { @@ -51,7 +51,7 @@ impl State for Validation { } fn evolve(&mut self, event: &Self::Event) { - self.0.insert(event.object.id(), event.clone()); + self.0.insert(event.object.id(), event.err.clone()); } } From 305d7c6e25918816b5909aade3fe7462aef59aff Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 2 May 2023 11:41:48 +0200 Subject: [PATCH 5/8] Update variable name --- crates/fj-kernel/src/services/validation.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index 6413f3f2e9..fd40a9d1b1 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -21,8 +21,8 @@ impl Drop for Validation { errors:" ); - for event in self.0.values() { - println!("{}", event); + for err in self.0.values() { + println!("{}", err); } if !thread::panicking() { From 397e655b6ecaac4f4fa26aca2fbdbe2f9fc59b22 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 2 May 2023 11:42:08 +0200 Subject: [PATCH 6/8] Remove unnecessary `pub` --- crates/fj-kernel/src/services/validation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index fd40a9d1b1..b0cc7a3726 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -10,7 +10,7 @@ use super::State; /// Errors that occurred while validating the objects inserted into the stores #[derive(Default)] -pub struct Validation(pub BTreeMap); +pub struct Validation(BTreeMap); impl Drop for Validation { fn drop(&mut self) { From 10aeba26966a150f54d1bcfe222ac88484f7e2fb Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 2 May 2023 11:42:40 +0200 Subject: [PATCH 7/8] Convert tuple struct into regular struct --- crates/fj-kernel/src/services/validation.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index b0cc7a3726..ba5881af38 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -10,18 +10,20 @@ use super::State; /// Errors that occurred while validating the objects inserted into the stores #[derive(Default)] -pub struct Validation(BTreeMap); +pub struct Validation { + errors: BTreeMap, +} impl Drop for Validation { fn drop(&mut self) { - let num_errors = self.0.len(); + let num_errors = self.errors.len(); if num_errors > 0 { println!( "Dropping `Validation` with {num_errors} unhandled validation \ errors:" ); - for err in self.0.values() { + for err in self.errors.values() { println!("{}", err); } @@ -51,7 +53,7 @@ impl State for Validation { } fn evolve(&mut self, event: &Self::Event) { - self.0.insert(event.object.id(), event.err.clone()); + self.errors.insert(event.object.id(), event.err.clone()); } } From 42d35559c8da40b4cd90367917e8a9f4ad86009b Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 2 May 2023 11:44:25 +0200 Subject: [PATCH 8/8] Prepare for more types of validation events --- crates/fj-kernel/src/services/mod.rs | 2 +- crates/fj-kernel/src/services/validation.rs | 23 ++++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/crates/fj-kernel/src/services/mod.rs b/crates/fj-kernel/src/services/mod.rs index 547a801370..79482136d2 100644 --- a/crates/fj-kernel/src/services/mod.rs +++ b/crates/fj-kernel/src/services/mod.rs @@ -11,7 +11,7 @@ use crate::objects::{Object, Objects, WithHandle}; pub use self::{ objects::{InsertObject, Operation}, service::{Service, State}, - validation::{Validation, ValidationCommand, ValidationFailed}, + validation::{Validation, ValidationCommand, ValidationEvent}, }; /// The kernel services diff --git a/crates/fj-kernel/src/services/validation.rs b/crates/fj-kernel/src/services/validation.rs index ba5881af38..326ff87383 100644 --- a/crates/fj-kernel/src/services/validation.rs +++ b/crates/fj-kernel/src/services/validation.rs @@ -36,7 +36,7 @@ impl Drop for Validation { impl State for Validation { type Command = ValidationCommand; - type Event = ValidationFailed; + type Event = ValidationEvent; fn decide(&self, command: Self::Command, events: &mut Vec) { let ValidationCommand::ValidateObject { object } = command; @@ -45,7 +45,7 @@ impl State for Validation { object.validate(&mut errors); for err in errors { - events.push(ValidationFailed { + events.push(ValidationEvent::ValidationFailed { object: object.clone(), err, }); @@ -53,7 +53,11 @@ impl State for Validation { } fn evolve(&mut self, event: &Self::Event) { - self.errors.insert(event.object.id(), event.err.clone()); + match event { + ValidationEvent::ValidationFailed { object, err } => { + self.errors.insert(object.id(), err.clone()); + } + } } } @@ -68,10 +72,13 @@ pub enum ValidationCommand { /// The event produced by the validation service #[derive(Clone)] -pub struct ValidationFailed { - /// The object for which validation failed - pub object: Object, +pub enum ValidationEvent { + /// Validation of an object failed + ValidationFailed { + /// The object for which validation failed + object: Object, - /// The validation error - pub err: ValidationError, + /// The validation error + err: ValidationError, + }, }