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
Types::Standard.
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.