hackish impl of parameterized constraints, more examples (I think normal and paramete...
[gitmo/MooseX-Types.git] / t / lib / DecoratorLibrary.pm
1 package DecoratorLibrary;
2
3 use warnings;
4 use strict;
5
6 use MooseX::Types::Moose qw( Str ArrayRef HashRef Int );
7 use MooseX::Types
8     -declare => [qw(
9         MyArrayRefBase
10         MyArrayRefInt01
11         MyArrayRefInt02
12         MyHashRefOfInts
13         MyHashRefOfStr
14     )];
15
16 subtype MyArrayRefBase,
17     as ArrayRef;
18     
19 coerce MyArrayRefBase,
20     from Str,
21     via {[split(',', $_)]};
22     
23 subtype MyArrayRefInt01,
24     as ArrayRef[Int];
25
26 coerce MyArrayRefInt01,
27     from Str,
28     via {[split('\.',$_)]},
29     from HashRef,
30     via {[sort values(%$_)]};
31     
32 subtype MyArrayRefInt02,
33     as MyArrayRefBase[Int];
34     
35 subtype MyHashRefOfInts,
36     as HashRef[Int];
37     
38 subtype MyHashRefOfStr,
39     as HashRef[Str];
40
41 coerce MyArrayRefInt02,
42     from Str,
43     via {[split(':',$_)]},
44     from MyHashRefOfInts,
45     via {[sort values(%$_)]},
46     from MyHashRefOfStr,
47     via {[ sort map { length $_ } values(%$_) ]},
48     ### Can't do HashRef[ArrayRef] here, need to force precidence I guess???
49     from HashRef([ArrayRef]),
50     via {[ sort map { @$_ } values(%$_)] };
51     
52 1;