about summary refs log tree commit diff
path: root/lib/MooseX/Net/API/Error.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MooseX/Net/API/Error.pm')
-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__