Skip to content

Commit 0539c9f

Browse files
feat: add top level validations (#43)
1 parent 9746224 commit 0539c9f

32 files changed

+736
-277
lines changed

examples/basic/src/email_address.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use fortifier::Validate;
22

33
#[derive(Validate)]
4+
#[validate(custom(function = validate_custom, error = CustomError))]
45
pub enum ChangeEmailAddressRelation {
56
Create {
67
#[validate(email_address)]
@@ -16,3 +17,10 @@ pub enum ChangeEmailAddressRelation {
1617
id: String,
1718
},
1819
}
20+
21+
#[derive(Debug, PartialEq)]
22+
pub struct CustomError;
23+
24+
fn validate_custom(_value: &ChangeEmailAddressRelation) -> Result<(), CustomError> {
25+
Ok(())
26+
}

packages/fortifier-macros-tests/tests/validate/context_pass.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
use fortifier::{Validate, ValidateWithContext, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
struct Context {
45
min: usize,
56
max: usize,
67
}
78

89
#[derive(Validate)]
9-
#[validate(context = Context)]
10+
#[validate(
11+
context = Context,
12+
custom(function = validate_custom, error = CustomError, context),
13+
)]
1014
struct CreateUser {
1115
#[validate(length(min = context.min, max = context.max))]
1216
name: String,
1317
}
1418

19+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
20+
struct CustomError;
21+
22+
fn validate_custom(_value: &CreateUser, _context: &Context) -> Result<(), CustomError> {
23+
Ok(())
24+
}
25+
1526
fn main() -> Result<(), ValidationErrors<CreateUserValidationError>> {
1627
let data = CreateUser {
1728
name: "John Doe".to_owned(),

packages/fortifier-macros-tests/tests/validate/enum_mixed_pass.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
46
enum FieldType {
57
Boolean,
68
Integer,
@@ -11,6 +13,13 @@ enum FieldType {
1113
String(#[validate(range(min = 1))] usize),
1214
}
1315

16+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
17+
struct CustomError;
18+
19+
fn validate_custom(_value: &FieldType) -> Result<(), CustomError> {
20+
Ok(())
21+
}
22+
1423
fn main() -> Result<(), ValidationErrors<FieldTypeValidationError>> {
1524
let data = FieldType::Boolean;
1625

packages/fortifier-macros-tests/tests/validate/enum_named_pass.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
46
enum ChangeEmailAddressRelation {
57
Create {
68
#[validate(email_address)]
@@ -17,6 +19,13 @@ enum ChangeEmailAddressRelation {
1719
},
1820
}
1921

22+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
23+
struct CustomError;
24+
25+
fn validate_custom(_value: &ChangeEmailAddressRelation) -> Result<(), CustomError> {
26+
Ok(())
27+
}
28+
2029
fn main() -> Result<(), ValidationErrors<ChangeEmailAddressRelationValidationError>> {
2130
let data = ChangeEmailAddressRelation::Create {
2231
email_address: "john@doe.com".to_owned(),

packages/fortifier-macros-tests/tests/validate/enum_unit_pass.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1-
use std::convert::Infallible;
2-
31
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
43

54
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
66
enum ChangeEmailAddressRelation {
77
Create,
88
Update,
99
Delete,
1010
}
1111

12-
fn main() -> Result<(), ValidationErrors<Infallible>> {
12+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
13+
struct CustomError;
14+
15+
fn validate_custom(_value: &ChangeEmailAddressRelation) -> Result<(), CustomError> {
16+
Ok(())
17+
}
18+
19+
fn main() -> Result<(), ValidationErrors<ChangeEmailAddressRelationValidationError>> {
1320
let data = ChangeEmailAddressRelation::Create;
1421

1522
data.validate_sync()?;

packages/fortifier-macros-tests/tests/validate/enum_unnamed_pass.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
46
enum ChangeEmailAddressRelation {
57
Create(#[validate(email_address)] String),
68
Update(String, #[validate(email_address)] String),
79
Delete(String),
810
}
911

12+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
13+
struct CustomError;
14+
15+
fn validate_custom(_value: &ChangeEmailAddressRelation) -> Result<(), CustomError> {
16+
Ok(())
17+
}
18+
1019
fn main() -> Result<(), ValidationErrors<ChangeEmailAddressRelationValidationError>> {
1120
let data = ChangeEmailAddressRelation::Create("john@doe.com".to_owned());
1221

packages/fortifier-macros-tests/tests/validate/struct_named_generics_pass.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use fortifier::{Validate, ValidateEmailAddress, ValidateLength, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
46
struct CreateUser<E: ValidateEmailAddress, N: ValidateLength<usize>> {
57
#[validate(email_address)]
68
email_address: E,
@@ -9,6 +11,17 @@ struct CreateUser<E: ValidateEmailAddress, N: ValidateLength<usize>> {
911
name: N,
1012
}
1113

14+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
15+
struct CustomError;
16+
17+
fn validate_custom<E, N>(_value: &CreateUser<E, N>) -> Result<(), CustomError>
18+
where
19+
E: ValidateEmailAddress,
20+
N: ValidateLength<usize>,
21+
{
22+
Ok(())
23+
}
24+
1225
fn main() -> Result<(), ValidationErrors<CreateUserValidationError>> {
1326
let data = CreateUser {
1427
email_address: "john@doe.com",

packages/fortifier-macros-tests/tests/validate/struct_named_lifetimes_pass.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
46
struct CreateUser<'a, 'b> {
57
#[validate(email_address)]
68
email_address: &'a str,
@@ -9,6 +11,13 @@ struct CreateUser<'a, 'b> {
911
name: &'b str,
1012
}
1113

14+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
15+
struct CustomError;
16+
17+
fn validate_custom<'a, 'b>(_value: &CreateUser<'a, 'b>) -> Result<(), CustomError> {
18+
Ok(())
19+
}
20+
1221
fn main() -> Result<(), ValidationErrors<CreateUserValidationError>> {
1322
let data = CreateUser {
1423
email_address: "john@doe.com",

packages/fortifier-macros-tests/tests/validate/struct_named_pass.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
23

34
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
46
struct CreateUser {
57
#[validate(email_address)]
68
email_address: String,
@@ -9,6 +11,13 @@ struct CreateUser {
911
name: String,
1012
}
1113

14+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
15+
struct CustomError;
16+
17+
fn validate_custom(_value: &CreateUser) -> Result<(), CustomError> {
18+
Ok(())
19+
}
20+
1221
fn main() -> Result<(), ValidationErrors<CreateUserValidationError>> {
1322
let data = CreateUser {
1423
email_address: "john@doe.com".to_owned(),

packages/fortifier-macros-tests/tests/validate/struct_unit_pass.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1-
use std::convert::Infallible;
2-
31
use fortifier::{Validate, ValidationErrors};
2+
use serde::{Deserialize, Serialize};
43

54
#[derive(Validate)]
5+
#[validate(custom(function = validate_custom, error = CustomError))]
66
struct CreateUser;
77

8-
fn main() -> Result<(), ValidationErrors<Infallible>> {
8+
#[derive(Debug, Deserialize, PartialEq, Serialize)]
9+
struct CustomError;
10+
11+
fn validate_custom(_value: &CreateUser) -> Result<(), CustomError> {
12+
Ok(())
13+
}
14+
15+
fn main() -> Result<(), ValidationErrors<CreateUserValidationError>> {
916
let data = CreateUser;
1017

1118
data.validate_sync()?;

0 commit comments

Comments
 (0)