From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

Moose::Util::meta_attribute_alias('JSONAttribute');
has method => (is => 'rw', isa => 'Str', required => 1);
has decode_as => (is => 'rw', isa => 'Str', required => 1);
after 'install_accessors' => sub {
my $self = shift;
my $realclass = $self->associated_class();
my $closure = $self->name;
my $coderef;
if ($self->decode_as eq 'JSON') {
$coderef = sub {
my $self = shift;
return decode_json($self->$closure());
};
} elsif ($self->decode_as eq 'URLJSON') {
$coderef = sub {
my $self = shift;
return decode_json(URL::Encode::url_decode($self->$closure()));
};
} else {
die "Unrecognized JSONAttribute decode_as attribute";
}
$realclass->add_method( $self->method => $coderef );
};
1;