package WebService::TFL::TubeStatus::Response; use Moo; use WebService::TFL::TubeStatus::Response::Line; use Types::Standard -all; use namespace::clean; has lines => ( is => 'ro', isa => ArrayRef[InstanceOf['WebService::TFL::TubeStatus::Response::Line']], required => 1, ); sub new_from_response { my ($class,$response_data) = @_; return $class->new({ lines=> [ map { WebService::TFL::TubeStatus::Response::Line->new_from_response($_) } grep { $_->{'$type'} =~ /\bLine\b/ } $response_data->@* ], }); } 1;