The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Catmandu::Serializer;

use namespace::clean;
use Catmandu::Sane;
use Catmandu::Util qw(require_package);
use Moo::Role;

has serialization_format => (
    is      => 'ro',
    builder => 'default_serialization_format',
);

has serializer => (
    is      => 'ro',
    lazy    => 1,
    builder => '_build_serializer',
    handles => [qw(serialize deserialize)]
);

sub default_serialization_format { 'json' }

sub _build_serializer {
    my ($self) = @_;
    my $pkg = require_package($self->serialization_format, 'Catmandu::Serializer');
    $pkg->new;
}

1;