summaryrefslogtreecommitdiff
path: root/lib/WebService/TFL/Bus/ResponseTypeRole.pm
blob: 6cfd460d24f61957e3a8140deabf5c0feb7a9739 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package WebService::TFL::Bus::ResponseTypeRole; 
use MooseX::Role::Parameterized;
use WebService::TFL::Bus::Fields;
use WebService::TFL::Bus::Types 'DateTimeMillis';
 
parameter type => (
    isa => 'Str',
    required => 1,
);
 
role {
    my $p = shift;
    my $method = $p->type . '_return_fields';
    my @fields = WebService::TFL::Bus::Fields->$method;
 
    for my $field (@fields) {
        has $field => (
            is => 'ro',
            $field =~ /Time$/ ? (
                isa => DateTimeMillis,
                coerce => 1,
            ) : () ),
        );
    }
 
    method new_from_array => sub {
        my ($class,$return_set,$array) = @_;
 
        my %args;
        my $i=1;
        for my $field (@fields) {
            next unless exists $return_set->{$field};
            $args{$field}=$array->[$i];
            ++$i;
        }
        return $class->new(\%args);
    }
};
 
1;