sub perform_request()

in lib/Search/Elasticsearch/Cxn/Mojo.pm [34:87]


sub perform_request {
#===================================
    my ( $self, $params ) = @_;

    my $uri     = $self->build_uri($params) . '';
    my $method  = $params->{method};
    my %headers = ( %{ $self->default_headers } );

    my @args = ( $method, $uri, \%headers );
    my $data = $params->{data};
    if ( defined $data ) {
        $headers{'Content-Type'}     = $params->{mime_type};
        $headers{'Content-Encoding'} = $params->{encoding}
            if $params->{encoding};
        push @args, $data;
    }

    my $handle = $self->handle;
    $handle->connect_timeout( $self->connect_timeout );
    $handle->request_timeout( $params->{timeout} || $self->request_timeout );

    my $tx = $handle->build_tx(@args);

    my $deferred = deferred;
    $tx = $handle->start(
        $tx,
        sub {
            my ( $ua, $tx ) = @_;
            my $res = $tx->res;
            my $error;
            if ( $error = $res->error ) {
                $error = $error->{message}
                    if ref $error eq 'HASH';
            }

            my $headers = $res->headers->to_hash;
            $headers->{ lc($_) } = delete $headers->{$_} for keys %{$headers};
            try {
                my ( $code, $response ) = $self->process_response(
                    $params,    # request
                    ( $res->code || 500 ),    # status
                    $error,                   # reason
                    $res->body,               # content
                    $headers,                 # headers
                );
                $deferred->resolve( $code, $response );
            }
            catch {
                $deferred->reject($_);
            };
        }
    );
    $deferred->promise;
}