package Data::MultiValued::Exceptions; # ABSTRACT: exception classes =head1 DESCRIPTION This module defines a few exception classes, using L as a base class. =head1 CLASSES =head2 C Base class for "not found" errors. Has a C attribute, containing the value that was not found. =cut package Data::MultiValued::Exceptions::NotFound;{ use Moose; extends 'Throwable::Error'; has value => ( is => 'ro', required => 1, ); sub as_string { my ($self) = @_; my $str = $self->message . ($self->value // ''); $str .= "\n\n" . $self->stack_trace->as_string; return $str; } } =head2 C Subclass of L, for tags. Stringifies to: tag not found: $value $stack_trace =cut package Data::MultiValued::Exceptions::TagNotFound;{ use Moose; extends 'Data::MultiValued::Exceptions::NotFound'; has '+message' => ( default => 'tag not found: ', ); } =head2 C Subclass of L, for ranges. Stringifies to: no range found for value: $value $stack_trace =cut package Data::MultiValued::Exceptions::RangeNotFound;{ use Moose; extends 'Data::MultiValued::Exceptions::NotFound'; has '+message' => ( default => 'no range found for value: ', ); } =head2 C Thrown when an invalid range is supplied to a method. An invalid range is a range with C greater than C. Stringifies to: invalid range: $from, $to $stack_trace =cut package Data::MultiValued::Exceptions::BadRange;{ use Moose; extends 'Throwable::Error'; has ['from','to'] => ( is => 'ro', required => 1 ); has '+message' => ( default => 'invalid range: ', ); sub as_string { my ($self) = @_; my $str = $self->message . $self->from . ', ' . $self->to; $str .= "\n\n" . $self->stack_trace->as_string; return $str; } } 1;