package App::Glacier::Timestamp;
use strict;
use warnings;
use Carp;
our @ISA = qw(Exporter);
our @EXPORT = qw(timestamp_deserialize);
use DateTime::Format::ISO8601;
use App::Glacier::DateTime;

sub _to_timestamp {
    my $obj = shift;
    my $ret;
    
    if (ref($obj) eq 'ARRAY') {
        $ret = [ map { _to_timestamp($_) } @{$obj} ];
    } elsif (ref($obj) eq 'HASH') {
        $ret = {map {
            my $v = $obj->{$_};
            if (/Date$/ && defined($v)) {
                $_ => bless DateTime::Format::ISO8601->
                                     parse_datetime($v),
                                   'App::Glacier::DateTime';
            } else {
                $_ => _to_timestamp($v);
            }
        } keys %$obj};
    } else {
        $ret = $obj;
    }
    
    return $ret;
}

sub timestamp_deserialize {
    return _to_timestamp(shift);
}

1;