Paws-Net-MultiplexCaller
view release on metacpan or search on metacpan
lib/Paws/Net/MultiplexCaller.pm view on Meta::CPAN
package Paws::Net::MultiplexCaller;
use Moose;
with 'Paws::Net::CallerRole';
our $VERSION = '0.03';
# TODO: HashRef of things that do Paws::Net::CallerRole
has caller_for => (is => 'ro', isa => 'HashRef', required => 1);
# TODO: thing that does Paws::Net::CallerRole or Undef
has default_caller => (is => 'ro', isa => 'Object');
sub get_implementation {
my ($self, $service) = @_;
return $self->caller_for->{ $service } if (defined $self->caller_for->{ $service });
return $self->default_caller if (defined $self->default_caller);
die "Can't find a caller for $service";
}
sub do_call {
my ($self, $service, $call_object) = @_;
return $self->get_implementation($self->service_from_callobject($call_object))
->do_call($service, $call_object);
}
sub caller_to_response {
#my ($self, $service, $call_object, $status, $content, $headers) = @_;
die "Die caller_to_response is not needed on the Multiplex caller";
}
sub service_from_callobject {
my ($self, $call_object) = @_;
my ($svc_name) = ($call_object->meta->name =~ m/^Paws::(\w+)::/);
die "$call_object doesn't seem to be a Paws::SERVICE::CALL" if (not defined $svc_name);
return $svc_name;
}
1;
### main pod documentation begin ###
=encoding UTF-8
=head1 NAME
Paws::Net::MultiplexCaller - Control routing of services to Paws callers
=head1 SYNOPSIS
use Paws::Net::MultiplexCaller;
use Paws::Net::LWPCaller;
use Paws::Net::MockCaller;
my $paws = Paws->new(
config => {
caller => Paws::Net::MultiplexCaller->new(
caller_for => {
SQS => Paws::Net::LWPCaller->new(),
EC2 => Paws::Net::MockCaller->new(...),
},
default_caller => Paws::Net::Caller->new
)
}
);
# SQS methods will be called with LWPCaller
# $paws->service('SQS', region => 'eu-west-1')->CreateQueue
# EC2 with the MockCaller
# $paws->service('EC2', region => 'us-east-1')->RunInstances
# others will be called with the default Paws::Net::Caller
( run in 1.379 second using v1.01-cache-2.11-cpan-39bf76dae61 )