#!/usr/bin/perl

package KiokuDB::Backend::Serialize::JSPON;
use Moose::Role;

use KiokuDB::Backend::Serialize::JSPON::Expander;
use KiokuDB::Backend::Serialize::JSPON::Collapser;

use namespace::clean -except => 'meta';

with qw(
    KiokuDB::Backend::TypeMap::Default::JSON
    KiokuDB::Backend::Serialize::JSPON::Converter
);

has expander => (
    isa => "KiokuDB::Backend::Serialize::JSPON::Expander",
    is  => "rw",
    lazy_build => 1,
    handles => [qw(expand_jspon)],
);

sub _build_expander {
    my $self = shift;

    KiokuDB::Backend::Serialize::JSPON::Expander->new($self->_jspon_params);
}

has collapser => (
    isa => "KiokuDB::Backend::Serialize::JSPON::Collapser",
    is  => "rw",
    lazy_build => 1,
    handles => [qw(collapse_jspon)],
);

sub _build_collapser {
    my $self = shift;

    KiokuDB::Backend::Serialize::JSPON::Collapser->new($self->_jspon_params);
}

__PACKAGE__

__END__

=pod

=head1 NAME

KiokuDB::Backend::Serialize::JSPON - JSPON serialization helper

=head1 SYNOPSIS

    with qw(KiokuDB::Backend::Serialize::JSPON);

=head1 DESCRIPTION

This serialization role provides JSPON semantics for L<KiokuDB::Entry> and
L<KiokuDB::Reference> objects.

For serialization to JSON strings see L<KiokuDB::Backend::Serialize::JSON>.

=head1 METHODS

=over 4

=item expand_jspon

See L<KiokuDB::Backend::Serialize::JSPON::Expander/expand_jspon>

=item collapse_jspon

See L<KiokuDB::Backend::Serialize::JSPON::Collapser/collapse_jspon>

=back

=cut


