Changes
- Support
no_std
( the dependency needs to be declared asnutype = { default-features = false }
) - Support integration with
arbitrary
crate (seearbitrary
feature).- Support
Arbitrary
for integer types - Support
Arbitrary
for float types - Support
Arbitrary
for string inner types - Support
Arbitrary
for any inner types
- Support
- Possibility to specify boundaries (
greater
,greater_or_equal
,less
,less_or_equal
,len_char_min
,len_char_max
) with expressions or named constants. - Add
#[inline]
attribute to trivial functions - Improve error messages
Highlights
Here is an example of nutype and arbitrary playing together:
use nutype::nutype;
use arbtest::arbtest;
use arbitrary::Arbitrary;
#[nutype(
derive(Arbitrary, AsRef),
sanitize(trim),
validate(
not_empty,
len_char_max = 100,
),
)]
pub struct Title(String);
fn main() {
arbtest(|u| {
// Generate an arbitrary valid Title
let title = Title::arbitrary(u)?;
// The inner string is guaranteed to be non-empty
assert!(!title.as_ref().is_empty());
// The inner string is guaranteed not to exceed 100 characters
assert!(title.as_ref().chars().count() <= 100);
Ok(())
});
}
As you can see the derived implementation of Arbitrary
respects the validation rules.
In the similar way Arbitrary
can be derived for integer and float based types.