package Weather::OpenWeatherMap::Error; $Weather::OpenWeatherMap::Error::VERSION = '0.005004'; use strictures 2; use Carp; use Types::Standard -all; use Moo; with 'StackTrace::Auto'; use overload bool => sub { 1 }, '""' => sub { shift->as_string }, fallback => 1; has request => ( required => 1, is => 'ro', isa => InstanceOf['Weather::OpenWeatherMap::Request'], ); has source => ( required => 1, is => 'ro', isa => sub { $_[0] eq 'api' || $_[0] eq 'internal' || $_[0] eq 'http' or die "Expected one of: api, internal, http" }, ); has status => ( required => 1, is => 'ro', isa => Str, ); sub as_string { my ($self) = @_; my $src = uc $self->source; my $msg = $self->status; "($src) $msg" } 1; =pod =head1 NAME Weather::OpenWeatherMap::Error - Internal and API error objects =head1 SYNOPSIS # Usually received from Weather::OpenWeatherMap =head1 DESCRIPTION These objects contain information on internal or backend (API) errors; they are generally thrown by L or emitted by L in response to a failed request. These objects overload stringification (see L). These objects consume L. =head2 ATTRIBUTES =head3 request The original L object that caused the error to occur. =head3 source The source of the error, one of: C, C, C =head3 status The error/status message string. =head2 METHODS =head3 as_string Returns a stringified representation of the error in the form: C<< (uc $err->source) $err->status >> =head1 SEE ALSO L L L =head1 AUTHOR Jon Portnoy =cut