| name | kura-perl |
| description | Store and export type constraints for Type::Tiny, Moose, Data::Checks, and more |
| version | 1.0.0 |
| author | kfly8 |
| tags | perl, cpan, type-constraints, validation |
kura - Unified Type Constraint Storage
kura provides a simple way to store and export type constraints from multiple libraries.
Core Usage
Basic Declaration
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;
Supported Constraints
- Type objects (Type::Tiny, Moose, Specio, Data::Checks)
- Code references (converted to Type::Tiny)
- Hash references with
constraintandmessage
Practical Examples
Export Types
package 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
Built-in Class (v5.40+)
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
Best Practices
- Always load an exporter:
use Exporter 'import'; - Declare in order: Define child constraints before parent constraints
use kura Child => Str; use kura Parent => Dict[ name => Child ]; # Correct order - Private constraints: Prefix with
_to prevent exportuse kura _Private => Str; # Not exported - Package variables:
@EXPORT_OKand@KURAare auto-populated