+ if (eval { $resp->isa('Future') }) {
+ return $resp->followed_by(sub {
+ my $f = shift;
+
+ if (my ($exception, $category, @other) = $f->failure) {
+ if (ref $exception eq 'HASH') {
+ my $resp = $exception;
+ return Future->done($self->_handle_error($resp));
+ }
+
+ return Future->done({
+ error => $exception,
+ response => undef,
+ details => {
+ exception_details => [$category, @other],
+ },
+ });
+ }
+
+ my $resp = $f->get;
+ return Future->done($self->_handle_success($resp));
+ });
+ }
+ else {
+ return $self->_handle_error($resp) if !$resp->{success};
+ return $self->_handle_success($resp);
+ }
+}