| 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 { /@/ };
Syntax: use kura NAME => CONSTRAINT;
Supported Constraints
- Type objects (Type::Tiny, Moose, Specio, Data::Checks)
- Code references (converted to Type::Tiny)
- Hash references with
constraint and message
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');
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 => '');
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 ];
- Private constraints: Prefix with
_ to prevent export
use kura _Private => Str;
- Package variables:
@EXPORT_OK and @KURA are auto-populated