2 use MooseX::Types -declare [qw/Str/];
3 use MooseX::Types::Faceted qw(Str);
7 => with hasMaxLength(25),
19 use MooseX::Types::Moose qw(Int Str ArrayRef HashRef Object);
20 use MooseX::Types::Structured qw(Dict);
23 -declare => [qw/PositiveInt Length/];
25 use MooseX::Types::Parameterizable
26 -declare => [qw/MinLength MaxLength Size/];
33 where { exists $_ && defined $_ };
43 via { scalar keys %$_ };
45 subtype MinLength[Length],
48 my ($check, $parameter) = @_
49 return $parameter < length($check) ? 1:0;
52 subtype MaxLength[Length],
55 my ($check, $parameter) = @_
56 return $parameter >= length($check) ? 1:0;
59 subtype Size[Dict[max=>MaxLength,min=>MinLength]],
62 my ($check, $parameter) = @_;
63 $parameter->{max} > $parameter->{min};
67 Size[min=>5,max=>10]->check('aabbcc'); ## OK, length 6 in range
68 Size[min=>5,max=>10]->check('aa'); ## Not OK, length 2 out of range
69 Size[min=>5,max=>10]->check([1..8]); ## OK via coercion
70 Size[min=>1,max=>3]->check({a=>1,b=>2}); ## Ok via coercion
71 Size[min=>5,max=>10]->check($object); ## Not at least an Int
73 Size[min=>-10,max=>100]; ## NOT PositiveInt
74 Size[min=>'aaa', max=>100]; ## Not an Int
75 Size[min=>5, max=>2]; ## Not a Range