NAME
Types::JsonCoercions - coercions to and from JSON
SYNOPSIS
package Person {
use Moo;
use Types::Standard -types,
use Types::JsonCoercions -types;
has nicknames => (
is => 'ro',
isa => ArrayRefJ[Str],
coerce => 1,
required => 1,
);
}
my $alice => Person->new( nicknames => [ 'Ali' ] );
my $bob => Person->new( nicknames => '["Bob","Rob"]' );
DESCRIPTION
This module provides coercions to/from JSON for some of the types from Types::Standard.
Coercions
You can export coercions using:
use Types::JsonCoercions -coercions;
# or
use Types::JsonCoercions qw( ToJSON FromJSON );
And they can be applied to existing type constraints like:
isa => ArrayRef->plus_coercions( FromJSON ),
coerce => 1,
This also works with parameterized types:
isa => ArrayRef->of( HashRef )->plus_coercions( FromJSON ),
coerce => 1,
The FromJSON coercion can be added to any arrayref-like or hashref-like type constraints, and will coerce strings via a JSON decoder.
The ToJSON coercion can be added to string-like type constraints, and will coerce references via a JSON encoder.
Types
You can export the types like:
use Types::JsonCoercions -types;
# or
use Types::JsonCoercions qw( StrJ RefJ ArrayRefJ HashRefJ );
The type constraint StrJ is provided as a shortcut for Str->plus_coercions( ToJSON )
.
The type constraints RefJ, ArrayRefJ, and HashRefJ are provided as shortcuts for Ref->plus_coercions( FromJSON )
, etc.
RefJ, ArrayRefJ, and HashRefJ are parameterizable as per the types in Types::Standard, so ArrayRefJ[Int] should just work.
JSON Encoder/Decoder
This module will use JSON::MaybeXS if it is installed, and will otherwise fall back to JSON::PP.
BUGS
Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=Types-JsonCoercions.
SEE ALSO
AUTHOR
Toby Inkster <tobyink@cpan.org>.
COPYRIGHT AND LICENCE
This software is copyright (c) 2022 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.