The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

XS::ErrorCode - Perl binding for panda::ErrorCode (nested std::error_code)

SYNOPSIS

my $err = SomeFramework->some_method();
if ($err) {
    say $err;
    say $err->value;
    say $err->category->name;
    say $err->message;
}

DESCRIPTION

This binding is intended for use from XS modules that returns errors as panda::ErrorCode objects to perl. It provides them with typemap and Perl interface.

See XS::STL::ErrorCode for more info about error codes.

API

new($error_code, $next_error_code)

Creates nested error code object from XS::STL::ErrorCode and XS::ErrorCode. Normally you should not create these objects from perl.

value()

Returns top error code value (integer)

category()

Returns top error code category as XS::STL::ErrorCategory object

message()

Returns top error message

code()

Returns top error as XS::STL::ErrorCode object

next()

Returns XS::ErrorCode object with next error as top error or undef if it constains a single error.

Example printing all errors in stack:

while ($err) {
    say $err->value;
    say $err->message;
    $err = $err->next;
}

operator bool

Returns true if object contains errors

operator ""

Stringifies to whole stack of errors. Example output:

Connection timed out (110:generic), preceded by:
Permission denied (13:generic)

operator ==, eq

Compares with XS::ErrorCode or XS::STL::ErrorCode or number. Only top error is compared.

my $err = SomeFramework->some_method();
if ($err == SomeFramework::Error::unauthorized) {
    
}
elsif ($err == XS::STL::errc::connection_refused) {
}

AUTHOR

Pronin Oleg <syber@crazypanda.ru>, Crazy Panda LTD

LICENSE

You may distribute this code under the same terms as Perl itself.