package DecoratorLibrary;
-use warnings;
-use strict;
-
-use MooseX::Types::Moose qw( Str ArrayRef HashRef Int );
+use MooseX::Types::Moose qw( Str ArrayRef HashRef Int Object);
use MooseX::Types
-declare => [qw(
MyArrayRefBase
MyHashRefOfInts
MyHashRefOfStr
StrOrArrayRef
+ AtLeastOneInt
+ Jobs
+ SubOfMyArrayRefInt01
+ BiggerInt
+ isFive
+ isTen
+ isFifteen
+ TwoEqualArrayRefs
+ VeryBigInt
+ FiveOrTenOrFifteen
+ WierdIntegersArrayRef1
+ WierdIntegersArrayRef2
)];
subtype MyArrayRefBase,
as ArrayRef;
-
+
coerce MyArrayRefBase,
from Str,
via {[split(',', $_)]};
-
+
subtype MyArrayRefInt01,
as ArrayRef[Int];
+subtype BiggerInt,
+ as Int,
+ where {$_>10};
+
+subtype SubOfMyArrayRefInt01,
+ as MyArrayRefInt01[BiggerInt];
+
coerce MyArrayRefInt01,
from Str,
via {[split('\.',$_)]},
from HashRef,
via {[sort values(%$_)]};
-
+
subtype MyArrayRefInt02,
as MyArrayRefBase[Int];
-
+
subtype MyHashRefOfInts,
as HashRef[Int];
-
+
subtype MyHashRefOfStr,
as HashRef[Str];
via {[sort values(%$_)]},
from MyHashRefOfStr,
via {[ sort map { length $_ } values(%$_) ]},
- ### Can't do HashRef[ArrayRef] here, need to force precidence I guess???
- from HashRef([ArrayRef]),
- via {[ sort map { @$_ } values(%$_)] };
+ from HashRef[ArrayRef],
+ via {[ sort map { @$_ } values(%$_) ]};
subtype StrOrArrayRef,
- from Str|ArrayRef;
+ as Str|ArrayRef;
+
+subtype AtLeastOneInt,
+ as ArrayRef[Int],
+ where { @$_ > 0 };
+
+enum Jobs,
+ (qw/Programming Teaching Banking/);
+
+subtype isFive,
+ as Int,
+ where { $_ == 5};
+
+subtype isTen,
+ as Int,
+ where { $_ == 10};
+
+subtype isFifteen,
+ as Int,
+ where { $_ == 15};
+
+subtype VeryBigInt,
+ as BiggerInt,
+ where {$_>100};
+
+subtype FiveOrTenOrFifteen,
+ as isFive|isTen|isFifteen;
+
+subtype WierdIntegersArrayRef1,
+ as ArrayRef[FiveOrTenOrFifteen|VeryBigInt];
+
+subtype WierdIntegersArrayRef2,
+ as ArrayRef[FiveOrTenOrFifteen|Object];
1;