3b5d10397dbe86e041b9e4e1106492b526f306d6
[catagits/Gitalist.git] / lib / Gitalist / Git / Types.pm
1 package Gitalist::Git::Types;
2
3 use MooseX::Types
4      -declare => [qw/
5          SHA1
6          DateTime
7          Dir
8      /];
9
10 use MooseX::Types::Path::Class;
11 use MooseX::Types::ISO8601 qw/ISO8601DateTimeStr/;
12 use MooseX::Types::DateTime ();
13 use MooseX::Storage::Engine ();
14 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
15
16 subtype SHA1,
17     as NonEmptySimpleStr,
18     where { $_ =~ qr/^[0-9a-fA-F]{40}$/ },
19     message { q/Str doesn't look like a SHA1./ };
20
21 coerce SHA1,
22     from NonEmptySimpleStr,
23     via { 1 };
24
25 subtype DateTime,
26     as 'MooseX::Types::DateTime::DateTime',
27     where { 1 };
28
29 MooseX::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
40 subtype Dir,
41     as 'MooseX::Types::Path::Class::Dir',
42     where { 1 };
43
44 MooseX::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
55 1;