aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Form/Field/JSON.pm
blob: 4da4ef2b0a04edd62cdfca5ae53e13d8d3008c35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package FixMyStreet::App::Form::Field::JSON;

use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Field::Hidden';

use JSON::MaybeXS;
use MIME::Base64;

has '+inflate_method' => ( default => sub { \&inflate_json } );
has '+deflate_method' => ( default => sub { \&deflate_json } );
has '+fif_from_value' => ( default => 1 );

sub inflate_json {
    my ($self, $value) = @_;
    return $value unless $value;
    $value = decode_json(decode_base64($value));
    return $value;
}

sub deflate_json {
    my ($self, $value) = @_;
    return $value unless $value;
    $value = encode_base64(encode_json($value), "");
    return $value;
}

__PACKAGE__->meta->make_immutable;
use namespace::autoclean;

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

FixMyStreet::App::Form::Field::JSON - used to store some data in a hidden field

=cut