Do the correct thing with type contraints etc to be able to serialize things
[catagits/Gitalist.git] / lib / Gitalist / Git / Types.pm
CommitLineData
ceef0cf1 1package Gitalist::Git::Types;
2
3use MooseX::Types
e6e5020e 4 -declare => [qw/
5 SHA1
6 DateTime
7 Dir
8 /];
ceef0cf1 9
e6e5020e 10use MooseX::Types::Path::Class;
11use MooseX::Types::ISO8601 qw/ISO8601DateTimeStr/;
12use MooseX::Types::DateTime ();
13use MooseX::Storage::Engine ();
ceef0cf1 14use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
15
16subtype SHA1,
17 as NonEmptySimpleStr,
18 where { $_ =~ qr/^[0-9a-fA-F]{40}$/ },
19 message { q/Str doesn't look like a SHA1./ };
20
21coerce SHA1,
22 from NonEmptySimpleStr,
23 via { 1 };
24
e6e5020e 25subtype DateTime,
26 as 'MooseX::Types::DateTime::DateTime',
27 where { 1 };
28
29MooseX::Storage::Engine->add_custom_type_handler(
30 DateTime,
31 expand => sub {
32 my $val = shift;
33 Carp::confess("Not implemented");
34 },
35 collapse => sub {
36 to_ISO8601DateTimeStr(shift);
37 },
38);
39
40subtype Dir,
41 as 'MooseX::Types::Path::Class::Dir',
42 where { 1 };
43
44MooseX::Storage::Engine->add_custom_type_handler(
45 Dir,
46 expand => sub {
47 my $val = shift;
48 Carp::confess("Not implemented");
49 },
50 collapse => sub {
51 shift() . '';
52 },
53);
54
ceef0cf1 551;