NAME
results::exceptions - quickly create a bunch of exception classes
SYNOPSIS
use results;
use results::exceptions (
'DatabaseConnection',
'Unauthorized' => { has => [ 'username' ] },
'BadSqlSyntax' => { has => [ 'query' ] },
);
...;
return err( Unauthorized->new( username => $user ) );
# or just:
return Unauthorized->err( username => $user );
# or if you prefer traditional exceptions:
return Unauthorized->throw( username => $user );
DESCRIPTION
This is a module to quickly manufacture a bunch of classes to use as exceptions/errors. There are many like it, but this one integrates nicely with results.
Each kind of exception you import is named by an "err kind", which is an UpperCamelCase string. This may be followed by a hashref of options.
After you have imported a kind of exception, this module will create a class called "$caller\::Exception::$err_kind"
where $caller
is your package and $err_kind
is the err kind string. It will then create a constant called $err_kind
in your namespace, so you don't have to use the full "$caller\::Exception::$err_kind"
class name.
Options
Only two options are currently supported:
has
-
This may be an arrayref of attributes the exceptions should have. Think of Moose's
has
keyword, but much, much more limited.If omitted, the exceptions will have no attributes, which is often fine.
to_string
-
This may be either a string which the object should stringify to, or a coderef which should be called to stringify the object.
If omitted, the exceptions will stringify to their err kind.
Class Methods
Exception classes provide the following class methods:
MyErrKind->new( %params )
Create a new exception object, but don't do anything with it.
MyErrKind->err( %params )
Create a new exception object, and wrap it in an err Result. You'd normally then return that Result to your caller. For example:
return MyErrKind->err();
MyErrKind->throw( %params )
Create a new exception object, and then die
.
Object Methods
Exception objects provide these methods, plus read-only accessors for their attributes.
$exception->err_kind
Returns the err kind as a string.
$exception->to_string
Stringifies the exception. Exception objects also support string overloading.
Lexical exports
results::exceptions supports lexical exports:
use results::exceptions -lexical, (
'DatabaseConnection',
'Unauthorized' => { has => [ 'username' ] },
'BadSqlSyntax' => { has => [ 'query' ] },
);
This feature requires Perl 5.37.2 or above, or Lexical::Sub on older versions of Perl.
BUGS
Please report any bugs to https://github.com/tobyink/p5-results/issues.
SEE ALSO
result, match()
in Result::Trait.
AUTHOR
Toby Inkster <tobyink@cpan.org>.
COPYRIGHT AND LICENCE
This software is copyright (c) 2022 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.