package Catalyst::Exception; # XXX: See bottom of file for Exception implementation package Catalyst::Exception::Base; use Moose; use Carp; use namespace::clean -except => 'meta'; =head1 NAME Catalyst::Exception - Catalyst Exception Class =head1 SYNOPSIS Catalyst::Exception->throw( qq/Fatal exception/ ); See also L. =head1 DESCRIPTION This is the Catalyst Exception class. =head1 METHODS =head2 throw( $message ) =head2 throw( message => $message ) =head2 throw( error => $error ) Throws a fatal exception. =cut has message => ( is => 'ro', isa => 'Str', default => sub { $! || '' }, ); use overload q{""} => \&as_string, fallback => 1; sub as_string { my ($self) = @_; return $self->message; } around BUILDARGS => sub { my ($next, $class, @args) = @_; if (@args == 1 && !ref $args[0]) { @args = (message => $args[0]); } my $args = $class->$next(@args); $args->{message} ||= $args->{error} if exists $args->{error}; return $args; }; sub throw { my $class = shift; my $error = $class->new(@_); local $Carp::CarpLevel = 1; croak $error; } sub rethrow { my ($self) = @_; croak $self; } =head2 meta Provided by Moose =head1 AUTHORS Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut Catalyst::Exception::Base->meta->make_immutable; package Catalyst::Exception; use Moose; use namespace::clean -except => 'meta'; use vars qw[$CATALYST_EXCEPTION_CLASS]; BEGIN { extends($CATALYST_EXCEPTION_CLASS || 'Catalyst::Exception::Base'); } __PACKAGE__->meta->make_immutable; 1;