Amazon-DynamoDB

 view release on metacpan or  search on metacpan

lib/Amazon/DynamoDB/NaHTTP.pm  view on Meta::CPAN

package Amazon::DynamoDB::NaHTTP;
$Amazon::DynamoDB::NaHTTP::VERSION = '0.35';
use strict;
use warnings;


use Future;
use Net::Async::HTTP 0.30;
use IO::Async::Timer::Countdown;


sub new { 
    my $class = shift; 
    my $self = { @_ };

    defined($self->{loop}) || Carp::confess("An event loop is required");
    bless $self, $class;
}


sub request {
	my $self = shift;
	my $req = shift;
	my ($host, $port) = split /:/, ''.$req->uri->host_port;
        my $resp;
	$self->ua->do_request(
		request => $req,
		host    => $host,
		port    => $port || 80,
                on_response => sub {
                    $resp = shift;
                }
	)-> transform(
		done => sub {
                    if ($resp->is_success()) {
                        return $resp->decoded_content;
                    } else {
                        my $status = join ' ', $resp->code, $resp->message;
                        return Future->new->fail($status, $resp, $req)
                    }
		},
                fail => sub {
                    my $status = join ' ', $resp->code, $resp->message;
                    return ($status, $resp, $req);
                },
	);
}


sub ua {
	my $self = shift;
	unless($self->{ua}) {
		my $ua = Net::Async::HTTP->new(
                    max_connections_per_host => $self->{max_connections_per_host} // 0,
                    user_agent               => $self->{user_agent} // 'PerlAmazonDynamoDB/0.002',
                    pipeline                 => $self->{pipeline} // 0,
                    timeout                  => $self->{timeout} // 90,
                    max_in_flight            => $self->{max_in_flight} // 4,
                    fail_on_error            => 1,
		);
		$self->{loop}->add($ua);
		$self->{ua} = $ua;
	}
	$self->{ua};
}

sub delay {
    my $self = shift;
    my $amount = shift;

    if (!$amount) {
        return Future->new->done();
    }
    
    my $future = $self->{loop}->new_future;

    $self->{loop}->watch_time(after => $amount, 



( run in 3.075 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )