Do the correct thing with type contraints etc to be able to serialize things
[catagits/Gitalist.git] / lib / Gitalist / Git / Types.pm
index af12bbc..5cca578 100644 (file)
@@ -1,8 +1,16 @@
 package Gitalist::Git::Types;
 
 use MooseX::Types
-    -declare => [qw/SHA1/];
+    -declare => [qw/
+        SHA1
+        DateTime
+        Dir
+    /];
 
+use MooseX::Types::Path::Class;
+use MooseX::Types::ISO8601 qw/ISO8601DateTimeStr/;
+use MooseX::Types::DateTime ();
+use MooseX::Storage::Engine ();
 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
 
 subtype SHA1,
@@ -14,4 +22,34 @@ coerce SHA1,
     from NonEmptySimpleStr,
     via { 1 };
 
+subtype DateTime,
+    as 'MooseX::Types::DateTime::DateTime',
+    where { 1 };
+
+MooseX::Storage::Engine->add_custom_type_handler(
+    DateTime,
+        expand   => sub {
+            my $val = shift;
+            Carp::confess("Not implemented");
+        },
+        collapse => sub {
+            to_ISO8601DateTimeStr(shift);
+        },
+);
+
+subtype Dir,
+    as 'MooseX::Types::Path::Class::Dir',
+    where { 1 };
+
+MooseX::Storage::Engine->add_custom_type_handler(
+    Dir,
+        expand   => sub {
+            my $val = shift;
+            Carp::confess("Not implemented");
+        },
+        collapse => sub {
+            shift() . '';
+        },
+);
+
 1;