summaryrefslogtreecommitdiff
path: root/lib/MooseX/Net/API
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MooseX/Net/API')
-rw-r--r--lib/MooseX/Net/API/Error.pm33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/MooseX/Net/API/Error.pm b/lib/MooseX/Net/API/Error.pm
new file mode 100644
index 0000000..0542613
--- /dev/null
+++ b/lib/MooseX/Net/API/Error.pm
@@ -0,0 +1,33 @@
+package MooseX::Net::API::Error;
+
+use Moose;
+use JSON::XS;
+use Moose::Util::TypeConstraints;
+use overload '""' => \&error;
+
+subtype error => as 'Str';
+coerce error => from 'HashRef' => via { encode_json $_};
+
+has http_error => (
+ is => 'ro',
+ isa => 'HTTP::Response',
+ handles => { http_message => 'message', http_code => 'code' }
+);
+has reason => (
+ is => 'ro',
+ isa => 'error',
+ predicate => 'has_reason',
+ coerce => 1
+);
+
+sub error {
+ my $self = shift;
+ return
+ ( $self->has_reason && $self->reason )
+ || ( $self->http_message . ": " . $self->http_code )
+ || 'unknown';
+}
+
+1;
+
+__END__