roles
[gitmo/MooseX-Storage.git] / lib / MooseX / Storage.pm
CommitLineData
e59193fb 1
e59193fb 2package MooseX::Storage;
3
4sub import {
5 my $pkg = caller();
6 $pkg->meta->alias_method('Storage' => sub {
4d1850a6 7 my %params = @_;
8
9 my @roles = (
10 'MooseX::Storage::Basic'
11 );
12
13 push @roles => 'MooseX::Storage::Format::' . $params{'format'};
14 Class::MOP::load_class($roles[-1])
15 || die "Could not load format role (" . $roles[-1] . ") for package ($pkg)";
16
17 if (exists $params{'io'}) {
18 push @roles => 'MooseX::Storage::IO::' . $params{'io'};
19 Class::MOP::load_class($roles[-1])
20 || die "Could not load IO role (" . $roles[-1] . ") for package ($pkg)";
21 }
22
23 return @roles;
e59193fb 24 });
25}
26
4d1850a6 27package MooseX::Storage::Basic;
e59193fb 28use Moose::Role;
29
4d1850a6 30use MooseX::Storage::Engine;
e59193fb 31
4d1850a6 32sub pack {
33 my $self = shift;
34 my $e = MooseX::Storage::Engine->new( object => $self );
35 $e->collapse_object;
36}
e59193fb 37
4d1850a6 38sub unpack {
39 my ( $class, $data ) = @_;
40 my $e = MooseX::Storage::Engine->new( class => $class );
41 $class->new( $e->expand_object($data) );
42}
e9739624 43
e59193fb 441;
45
e9739624 46__END__
47
48=pod
49
50=cut