use strict;
use warnings;
-require Mouse::TypeRegistry;
+require Mouse::Util::TypeConstraints;
+use MouseX::Types::TypeDecorator;
sub import {
my $class = shift;
if (defined $args{'-declare'} && ref($args{'-declare'}) eq 'ARRAY') {
my $storage = $caller->type_storage($caller);
for my $name (@{ $args{'-declare'} }) {
- $storage->{$name} = "$caller\::$name";
- *{"$caller\::$name"} = sub () { $caller->type_storage->{$name} };
+ my $obj = $storage->{$name} = "$caller\::$name";
+ *{"$caller\::$name"} = sub () { $obj };
}
}
- return Mouse::TypeRegistry->import( callee => $caller );
+ return Mouse::Util::TypeConstraints->import( callee => $caller );
}
sub _import {
my($type_class, $pkg, @types) = @_;
no strict 'refs';
for my $name (@types) {
- *{"$pkg\::$name"} = sub () { $type_class->type_storage->{$name} }
+ my $obj = $type_class->type_storage->{$name};
+ $obj = $type_class->type_storage->{$name} = MouseX::Types::TypeDecorator->new($obj)
+ unless ref($obj);
+ *{"$pkg\::$name"} = sub () { $obj };
}
}
=head1 NAME
-Mouse - Organise your Mouse types in libraries
+MouseX::Types - Organise your Mouse types in libraries
=head1 SYNOPSIS
use MouseX::Types
-declare => [qw(
PositiveInt NegativeInt
- ArrayRefOfPositiveInt ArrayRefOfAtLeastThreeNegativeInts
- LotsOfInnerConstraints StrOrArrayRef
)];
# import builtin types
from Int,
via { 1 };
- # with parameterized constraints.
-
- subtype ArrayRefOfPositiveInt,
- as ArrayRef[PositiveInt];
-
- subtype ArrayRefOfAtLeastThreeNegativeInts,
- as ArrayRef[NegativeInt],
- where { scalar(@$_) > 2 };
-
- subtype LotsOfInnerConstraints,
- as ArrayRef[ArrayRef[HashRef[Int]]];
-
- # with TypeConstraint Unions
-
- subtype StrOrArrayRef,
- as Str|ArrayRef;
-
1;
=head2 Usage