————package
RedisDB::Parser::Error;
use
strict;
use
warnings;
our
$VERSION
=
"2.23"
;
$VERSION
=
eval
$VERSION
;
=head1 NAME
RedisDB::Parser::Error - default error class for RedisDB::Parser
=head1 SYNOPSIS
use Scalar::Util qw(blessed);
...;
sub callback {
my ( $master, $reply ) = @_;
die "$reply" if blessed $reply; # it's more like damned
...; # do something with reply
}
=head1 DESCRIPTION
Then RedisDB::Parser parses error response from server it creates an object of
this class and passes it to callback. In string context object returns the
error message from the server.
=head1 METHODS
=cut
=head2 $class->new($message)
Create new error object with specified error message.
=cut
sub
new {
my
(
$class
,
$message
) =
@_
;
if
(
$message
=~ /^MOVED / ) {
return
"${class}::MOVED"
->new(
$message
);
}
elsif
(
$message
=~ /^ASK / ) {
return
"${class}::ASK"
->new(
$message
);
}
return
bless
{
message
=>
$message
},
$class
;
}
=head2 $self->as_string
Return error message. Also you can just use object in string context.
=cut
sub
as_string {
return
shift
->{message};
}
package
RedisDB::Parser::Error::MOVED;
use
strict;
use
warnings;
our
@ISA
=
qw(RedisDB::Parser::Error)
;
sub
new {
my
(
$class
,
$message
) =
@_
;
my
(
$type
,
$slot
,
$host
,
$port
) =
(
$message
=~ /^(MOVED|ASK) \s ([0-9]+) \s ([0-9.]+):([0-9]+)$/x );
return
bless
{
slot
=>
$slot
,
host
=>
$host
,
port
=>
$port
,
message
=>
$message
,
},
$class
;
}
package
RedisDB::Parser::Error::ASK;
our
@ISA
=
qw(RedisDB::Parser::Error::MOVED)
;
1;
__END__
=head1 SEE ALSO
L<RedisDB::Parser>
=head1 AUTHOR
Pavel Shaydo, C<< <zwon at cpan.org> >>
=head1 LICENSE AND COPYRIGHT
Copyright 2011-2015,2018 Pavel Shaydo.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
=cut