+sub _handle_error {
+ my $self = shift;
+ my ($resp) = @_;
+
+ my $data = eval { $self->json->decode($resp->{content}) };
+ my $content = $resp->{content} // 'No content';
+ my $reason = $resp->{reason} // '';
+ my $message = "HTTP transport returned $resp->{status} ($reason): $content";
+
+ return {
+ error => $message,
+ response => $data,
+ details => {
+ http_response => $resp,
+ },
+ };
+}
+
+sub _handle_success {
+ my $self = shift;
+ my ($resp) = @_;
+
+ my $data = eval { $self->json->decode($resp->{content}) };
+ if (my $exception = $@) {
+ return {
+ error => "HTTP transport failed to decode response: $exception",
+ response => undef,
+ details => {
+ http_response => $resp,
+ },
+ };
+ }
+
+ return {
+ response => $data,
+ details => {
+ http_response => $resp,
+ },
+ };
+}
+