-
Birte Kristina Friesel authoredBirte Kristina Friesel authored
EFA.pm 31.72 KiB
package Travel::Routing::DE::EFA;
use strict;
use warnings;
use 5.010;
no if $] >= 5.018, warnings => "experimental::smartmatch";
use Carp qw(cluck);
use Encode qw(decode encode);
use Travel::Routing::DE::EFA::Route;
use Travel::Routing::DE::EFA::Route::Message;
use LWP::UserAgent;
use XML::LibXML;
use Exception::Class (
'Travel::Routing::DE::EFA::Exception',
'Travel::Routing::DE::EFA::Exception::Setup' => {
isa => 'Travel::Routing::DE::EFA::Exception',
description => 'invalid argument on setup',
fields => [ 'option', 'have', 'want' ],
},
'Travel::Routing::DE::EFA::Exception::Net' => {
isa => 'Travel::Routing::DE::EFA::Exception',
description => 'could not submit POST request',
fields => 'http_response',
},
'Travel::Routing::DE::EFA::Exception::NoData' => {
isa => 'Travel::Routing::DE::EFA::Exception',
description => 'backend returned no parsable route',
},
'Travel::Routing::DE::EFA::Exception::Ambiguous' => {
isa => 'Travel::Routing::DE::EFA::Exception',
description => 'ambiguous input',
fields => [ 'post_key', 'post_value', 'possibilities' ],
},
'Travel::Routing::DE::EFA::Exception::Other' => {
isa => 'Travel::Routing::DE::EFA::Exception',
description => 'EFA backend returned an error',
fields => ['message'],
},
);
our $VERSION = '2.13';
sub set_time {
my ( $self, %conf ) = @_;
my $time;
if ( $conf{departure_time} ) {
$self->{post}->{itdTripDateTimeDepArr} = 'dep';
$time = $conf{departure_time};
}
elsif ( $conf{arrival_time} ) {
$self->{post}->{itdTripDateTimeDepArr} = 'arr';
$time = $conf{arrival_time};
}
else {
Travel::Routing::DE::EFA::Exception::Setup->throw(
option => 'time',
error => 'Specify either departure_time or arrival_time'
);
}
if ( $time !~ / ^ [0-2]? \d : [0-5]? \d $ /x ) {
Travel::Routing::DE::EFA::Exception::Setup->throw(
option => 'time',
have => $time,
want => 'HH:MM',