package WebService::TFL::Bus::ResponseTypeRole;
use Package::Variant
importing => [ 'Moo::Role'],
subs => [ 'has' ];
use WebService::TFL::Bus::Fields;
use WebService::TFL::Bus::Types 'DateTimeMillis';
sub make_variant {
my ($class,$target_package,$type) = @_;
my $method = $type . '_return_fields';
my @fields = WebService::TFL::Bus::Fields->$method;
for my $field (@fields) {
has $field => (
is => 'ro',
( $field =~ /Time$/ ? (
isa => DateTimeMillis,
coerce => DateTimeMillis->coercion,
) : () ),
);
}
install 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;