package Types::DateTime;
use strict;
use warnings;
use namespace::autoclean;
use Type::Library -base, -declare => 'DateTimeT';
use Type::Utils -all;
use Types::Standard -types;
class_type DateTimeT, { class => 'DateTime' };
coerce DateTimeT, from Num, via {
require DateTime;
DateTime->from_epoch(epoch => $_ );
};
coerce DateTimeT, from Str, via {
require DateTime::Format::ISO8601;
s{([+-])(\d\d)(\d\d)\z}{$1$2:$3};
DateTime::Format::ISO8601->new->parse_datetime($_)
};
1;