package WebService::TFL::Bus; use Moo; use namespace::autoclean; use Types::URI 'Uri'; use Type::Utils -all; use WebService::TFL::Bus::Response; has user_agent => ( isa => duck_type(['get']), is => 'lazy', ); sub _build_user_agent { require LWP::UserAgent; my $ua = LWP::UserAgent->new(); $ua->env_proxy; return $ua; } has uri => ( isa => Uri, is => 'ro', coerce => Uri->coercion, default => 'http://countdown.api.tfl.gov.uk/interfaces/ura/instant_V1', ); sub request { my ($self,$request) = @_; my $http_response = $self->user_agent->get( $request->request_uri($self->uri) ); if ($http_response->is_success) { my $json = $http_response->content; return WebService::TFL::Bus::Response->new_from_json( $request->ReturnList, $json ); } else { die $http_response->status_line; } } 1;