Commit | Line | Data |
e59193fb |
1 | |
e59193fb |
2 | package MooseX::Storage; |
3 | |
4 | sub 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 |
27 | package MooseX::Storage::Basic; |
e59193fb |
28 | use Moose::Role; |
29 | |
4d1850a6 |
30 | use MooseX::Storage::Engine; |
e59193fb |
31 | |
4d1850a6 |
32 | sub pack { |
33 | my $self = shift; |
34 | my $e = MooseX::Storage::Engine->new( object => $self ); |
35 | $e->collapse_object; |
36 | } |
e59193fb |
37 | |
4d1850a6 |
38 | sub 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 |
44 | 1; |
45 | |
e9739624 |
46 | __END__ |
47 | |
48 | =pod |
49 | |
50 | =cut |