[![Build Status](https://travis-ci.org/akiym/Smart-Args-TypeTiny.svg?branch=master)](https://travis-ci.org/akiym/Smart-Args-TypeTiny) # NAME Smart::Args::TypeTiny - We are smart, smart for you # SYNOPSIS use Smart::Args::TypeTiny; use Types::Standard -all; sub func2 { args my $p => Int, my $q => {isa => Int, optional => 1}, ; } func2(p => 3, q => 4); # p => 3, q => 4 func2(p => 3); # p => 3, q => undef sub func3 { args my $p => {isa => Int, default => 3}; } func3(p => 4); # p => 4 func3(); # p => 3 package F; use Moo; use Smart::Args::TypeTiny; use Types::Standard -all; sub method { args my $self, my $p => Int, ; } sub class_method { args my $class => ClassName, my $p => Int, ; } sub simple_method { args_pos my $self, my $p; } my $f = F->new(); $f->method(p => 3); F->class_method(p => 3); F->simple_method(3); # DESCRIPTION Smart::Args::TypeTiny provides [Smart::Args](https://metacpan.org/pod/Smart::Args)-like argument validator using [Type::Tiny](https://metacpan.org/pod/Type::Tiny). # IMCOMPATIBLE CHANGES WITH Smart::Args ## ISA TAKES Type::Tiny TYPE OBJECT OR INSTANCE CLASS NAME This code is expected `$p` as InstanceOf\['Int'\], you should specify [Type::Tiny](https://metacpan.org/pod/Type::Tiny)'s type constraint. use Types::Standard -all; sub foo { args my $p => 'Int', # :( InstanceOf['Int'] my $q => Int, # :) Int my $r => 'Foo', # :) InstanceOf['Foo'] } ## DEFAULT PARAMETER CAN TAKE CODEREF AS LAZY VALUE sub foo { args my $p => {isa => 'Foo', default => create_foo}, # :( create_foo is called every time even if $p is passed my $q => {isa => 'Foo', default => sub { create_foo }}, # :) create_foo is called only when $p is not passed ; } # TIPS ## SKIP TYPE CHECK For optimization calling subroutine in runtime type check, you can overwrite `check_rule` like following code: { no warnings 'redefine'; sub Smart::Args::TypeTiny::check_rule { my ($rule, $value, $exists, $name) = @_; return $value; } } # SEE ALSO [Smart::Args](https://metacpan.org/pod/Smart::Args), [Params::Validate](https://metacpan.org/pod/Params::Validate), [Params::ValidationCompiler](https://metacpan.org/pod/Params::ValidationCompiler) [Type::Tiny](https://metacpan.org/pod/Type::Tiny), [Types::Standard](https://metacpan.org/pod/Types::Standard) # LICENSE Copyright (C) Takumi Akiyama. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. # AUTHOR Takumi Akiyama