#!/usr/bin/perl
package MooseX::Role::JSONObject;
use v5.012;
use strict;
use warnings;
use version; our $VERSION = version->declare("v0.1.0");
use Moose::Role;
use Method::Signatures;
use MooseX::Role::JSONObject::Util;
method to_json()
{
return MooseX::Role::JSONObject::Util::meta_to_json(
$self, $self->meta);
}
method from_json($class:, HashRef $data)
{
my $cls = ref $class || $class;
my $meta = Class::MOP::Class->initialize($cls);
return MooseX::Role::JSONObject::Util::meta_from_json(
$data, $meta);
}
1;
__END__
=encoding utf-8
=head1 NAME
MooseX::Role::JSONObject - create/store an object in a JSON-like hash
=head1 SYNOPSIS
package foo;
use Moose;
with 'MooseX::Role::JSONObject';
...
my $obj = foo->new(...);
my $data = $obj->to_json();
...
my $newobj = foo->from_json($data);
=head1 DESCRIPTION
The C<MooseX::Role::JSONObject> role provides two methods, C<to_json()>
and C<from_json()>, for storing and retrieving a Moose object's attributes
and, if they are Moose objects themselves, their attributes recursively.
This is mainly useful in two cases: creating an object and all of its
attributes from a hash parsed from a JSON string or storing an object and
all its attributes as a hash to be written to a JSON string.
=head1 METHODS
The C<MooseX::Role::JSONObject> role provides two methods:
=over 4
=item * C<to_json()>
The C<to_json()> method takes no parameters and returns a hash reference
containing the object's data.
=item * C<from_json($data)>
The C<from_json()> class method creates a new object with the specified
values for its attributes. If any of its attributes are Moose objects,
C<from_json()> will create new instances for those recursively and
populate them from the data.
Currently the C<from_json()> method always creates a new object; even
though it may be invoked on an already existing object instance, it will
not modify the instance's attributes, but return a new one instead.
=back
=head1 SEE ALSO
L<MooseX::Role::JSONObject::Meta::Trait>
=head1 LICENSE
Copyright (C) 2015 Peter Pentchev E<lt>roam@ringlet.netE<gt>
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 AUTHOR
Peter Pentchev E<lt>roam@ringlet.netE<gt>
=cut