70 lines
1.6 KiB
Perl
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};
|
|
}
|