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;