#!/usr/bin/perl package KiokuDB::Serializer; use Moose::Role; use Carp qw(croak); use Moose::Util::TypeConstraints; use namespace::clean -except => 'meta'; with qw(KiokuDB::Backend::Serialize); requires "serialize_to_stream"; requires "deserialize_from_stream"; my %types = ( storable => "KiokuDB::Serializer::Storable", json => "KiokuDB::Serializer::JSON", yaml => "KiokuDB::Serializer::YAML", ); coerce( __PACKAGE__, from Str => via { my $class = $types{lc($_)} or croak "unknown format: $_";; Class::MOP::load_class($class); $class->new; }, from HashRef => via { my %args = %$_; my $class = $types{lc(delete $args{format})} or croak "unknown format: $args{format}"; Class::MOP::load_class($class); $class->new(%args); }, ); __PACKAGE__ __END__ =pod =head1 NAME KiokuDB::Serializer - Standalone serializer object =head1 SYNOPSIS Backend->new( serializer => KiokuDB::Serializer::Storable->new( ... ), ); =head1 DESCRIPTION This role is for objects which perform the serialization roles (e.g. L) but can be used independently. This is used by L and L.