Store and export type constraints for Type::Tiny, Moose, Data::Checks, and more
kura provides a simple way to store and export type constraints from multiple libraries.
use Exporter 'import';
use Types::Common -types;
use kura Name => StrLength[1, 255];
use kura Age => Int & sub { $_ >= 0 };
use kura Email => sub { /@/ }; # Code ref auto-converted
Syntax: use kura NAME => CONSTRAINT;
constraint and messagepackage MyTypes {
use parent 'Exporter::Tiny';
use Types::Common -types;
use kura Name => StrLength[1, 255];
use kura Email => Str & sub { /@/ };
}
use MyTypes qw(Name Email);
Name->check('John'); # true
class User {
use Types::Common -types;
use kura Name => StrLength[1, 255];
field $name :param :reader;
ADJUST {
Name->assert_valid($name);
}
}
my $user = User->new(name => ''); # Dies: validation error
use Exporter 'import';use kura Child => Str;
use kura Parent => Dict[ name => Child ]; # Correct order
_ to prevent export
use kura _Private => Str; # Not exported
@EXPORT_OK and @KURA are auto-populated