Skip to content

Commit a06a803

Browse files
committed
fix error message
1 parent b364f14 commit a06a803

File tree

3 files changed

+11
-16
lines changed

3 files changed

+11
-16
lines changed

src/rule/composer/and.rs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::result::Error;
22
use crate::rule::Rule;
3+
use std::fmt::Debug;
34
use std::marker::PhantomData;
45

56
/// A macro to generate a `Rule` that combines multiple rules
@@ -59,7 +60,7 @@ impl<RULE1, RULE2> Default for And<RULE1, RULE2> {
5960
}
6061
}
6162

62-
impl<'a, T, RULE1, RULE2> Rule for And<RULE1, RULE2>
63+
impl<'a, T: Debug, RULE1, RULE2> Rule for And<RULE1, RULE2>
6364
where
6465
RULE1: Rule<Item = T> + 'a,
6566
RULE2: Rule<Item = T> + 'a,
@@ -71,17 +72,10 @@ where
7172
Ok(value) => RULE2::validate(value),
7273
Err(err) => {
7374
let rule1_error_message = err.to_string();
74-
let rule1_type_name = std::any::type_name::<RULE1>();
7575
match RULE2::validate(err.into_value()) {
76-
Ok(value) => {
77-
let message = format!("{rule1_error_message} ({rule1_type_name})");
78-
Err(Error::new(value, message))
79-
}
76+
Ok(value) => Err(Error::new(value, rule1_error_message)),
8077
Err(err) => {
81-
let rule2_type_name = std::any::type_name::<RULE2>();
82-
let message = format!(
83-
"{rule1_error_message} ({rule1_type_name}) & {err} ({rule2_type_name})",
84-
);
78+
let message = format!("[{rule1_error_message} && {err}]",);
8579
Err(Error::new(err.into_value(), message))
8680
}
8781
}
@@ -105,7 +99,7 @@ mod test {
10599
#[test]
106100
fn test_rule_binder_err() {
107101
type Target = And![EvenRuleU8, LessRuleU8<10>];
108-
assert_eq!(Target::validate(11).unwrap_err().to_string(), "the value must be even, but received 11 (refined_type::rule::number::even::EvenRuleU8) & the value must be less than 10, but received 11 (refined_type::rule::number::less::LessRuleU8<10>)");
102+
assert_eq!(Target::validate(11).unwrap_err().to_string(), "[the value must be even, but received 11 && the value must be less than 10, but received 11]");
109103
}
110104

111105
#[test]

src/rule/composer/not.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ where
2828
fn validate(target: Self::Item) -> crate::Result<T> {
2929
let bounded_rule = |t: T| match RULE::validate(t) {
3030
Ok(value) => {
31-
let type_name = std::any::type_name::<RULE>();
31+
let type_name = std::any::type_name::<RULE>()
32+
.replace("refined_type::rule::composer::or::Or", "Or")
33+
.replace("refined_type::rule::composer::and::And", "And");
3234
let message = format!("{value:?} does not satisfy Not<{type_name}>");
3335
Err(Error::new(value, message))
3436
}

src/rule/composer/or.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::result::Error;
22
use crate::rule::Rule;
3+
use std::fmt::Debug;
34
use std::marker::PhantomData;
45

56
/// A macro to generate a `Rule` that combines multiple rules
@@ -40,7 +41,7 @@ pub struct Or<RULE1, RULE2> {
4041
_rule2: PhantomData<RULE2>,
4142
}
4243

43-
impl<'a, T, RULE1, RULE2> Rule for Or<RULE1, RULE2>
44+
impl<'a, T: Debug, RULE1, RULE2> Rule for Or<RULE1, RULE2>
4445
where
4546
RULE1: Rule<Item = T> + 'a,
4647
RULE2: Rule<Item = T> + 'a,
@@ -55,12 +56,10 @@ where
5556
match RULE2::validate(err.into_value()) {
5657
Ok(value) => Ok(value),
5758
Err(err) => {
58-
let rule1_type_name = std::any::type_name::<RULE1>();
59-
let rule2_type_name = std::any::type_name::<RULE2>();
6059
let rule2_error_message = err.to_string();
6160
Err(Error::new(
6261
err.into_value(),
63-
format!("{rule1_error_message} ({rule1_type_name}) | {rule2_error_message} ({rule2_type_name})"),
62+
format!("[{rule1_error_message} || {rule2_error_message}]"),
6463
))
6564
}
6665
}

0 commit comments

Comments
 (0)