BeastBB/lib/BeastBB/Response.pm

70 lines
1.6 KiB
Perl

package BeastBB::Response;
use 5.32.1;
use strict;
use warnings;
use Carp qw/confess cluck/;
use Params::ValidationCompiler 'validation_for';
use Types::Standard qw/Bool Str Any/;
{
my $validator = validation_for(
params => {
is_error => { type => Bool, default => 0 },
content => { type => Any, optional => 1 },
error_message => { type => Str, optional => 1 },
}
);
sub new {
my $class = shift;
my %params = $validator->(@_);
my $is_error = $params{is_error};
my $content;
my $error_message;
if ( exists $params{content} ) {
$content = $params{content};
}
if ( exists $params{error_message} ) {
$error_message = $params{error_message};
}
if ($is_error) {
cluck 'Error should not have content, stripping it.'
if defined $content;
cluck 'You should pass a error message on error.'
if !defined $error_message;
return bless {
is_error => 1,
error_message => $error_message // '',
}, $class;
}
return bless { content => $content }, $class;
}
}
sub IsError {
my $self = shift;
return $self->{is_error};
}
sub ErrorMessage {
my $self = shift;
if ( !$self->IsError ) {
confess 'This is not an error.';
}
return $self->{error_message};
}
sub Content {
my $self = shift;
if ( $self->IsError ) {
confess 'Attempt to get content from error.';
}
return $self->{content};
}