summaryrefslogtreecommitdiff
path: root/lib/Carton/Error.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Carton/Error.pm')
-rw-r--r--lib/Carton/Error.pm46
1 files changed, 38 insertions, 8 deletions
diff --git a/lib/Carton/Error.pm b/lib/Carton/Error.pm
index 7c8074f..b469eac 100644
--- a/lib/Carton/Error.pm
+++ b/lib/Carton/Error.pm
@@ -1,12 +1,42 @@
package Carton::Error;
use strict;
-use Exception::Class (
- 'Carton::Error',
- 'Carton::Error::CommandNotFound' => { isa => 'Carton::Error' },
- 'Carton::Error::CommandExit' => { isa => 'Carton::Error', fields => [ 'code' ] },
- 'Carton::Error::CPANfileNotFound' => { isa => 'Carton::Error' },
- 'Carton::Error::SnapshotParseError' => { isa => 'Carton::Error', fields => [ 'path' ] },
- 'Carton::Error::SnapshotNotFound' => { isa => 'Carton::Error', fields => [ 'path' ] },
-);
+use overload '""' => sub { $_[0]->error };
+use Carp;
+
+sub throw {
+ my($class, @args) = @_;
+ die $class->new(@args);
+}
+
+sub rethrow {
+ die $_[0];
+}
+
+sub new {
+ my($class, %args) = @_;
+ bless \%args, $class;
+}
+
+sub error {
+ $_[0]->{error} || ref $_[0];
+}
+
+package Carton::Error::CommandNotFound;
+use parent 'Carton::Error';
+
+package Carton::Error::CommandExit;
+use parent 'Carton::Error';
+sub code { $_[0]->{code} }
+
+package Carton::Error::CPANfileNotFound;
+use parent 'Carton::Error';
+
+package Carton::Error::SnapshotParseError;
+use parent 'Carton::Error';
+sub path { $_[0]->{path} }
+
+package Carton::Error::SnapshotNotFound;
+use parent 'Carton::Error';
+sub path { $_[0]->{path} }
1;