diff options
Diffstat (limited to 'lib/Carton/Error.pm')
-rw-r--r-- | lib/Carton/Error.pm | 46 |
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; |