#!/usr/bin/perl package KiokuDB::TypeMap::Entry::Naive; use Moose; no warnings 'recursion'; use namespace::clean -except => 'meta'; with qw(KiokuDB::TypeMap::Entry::Std); sub compile_collapse_body { my ( $self, $class ) = @_; return sub { my ( $self, %args ) = @_; my $object = $args{object}; return $self->make_entry( %args, data => $self->visit_ref_data($object), ); }; } sub compile_expand { my ( $self, $class ) = @_; return sub { my ( $self, $entry ) = @_; $self->inflate_data( $entry->data, \( my $obj ), $entry ); bless $obj, $class; }; } sub compile_refresh { return sub { die "TODO" } } __PACKAGE__->meta->make_immutable; __PACKAGE__ __END__ =pod =head1 NAME KiokuDB::TypeMap::Entry::Naive - A typemap entry for "simple" objects =head1 SYNOPSIS KiokuDB::TypeMap->new( entires => { 'My::Class' => KiokuDB::TypeMap::Entry::Naive->new, }, ); =head1 DESCRIPTION This typemap entry is suitable for plain objects that can be stored by simply walking them recursively. Most objects fall into this category, but there are notable exceptions: =over 4 =item XS based objects, using a pointer as a number When being deserialized the pointer value will no longer be valid, causing segfaults. =item Inside out objects Since the referent is really a flyweight object with no data, the object will be missing its attributes and a suitable typemap entry is required instead. This applies to any object interacting with a global state of some sort. =item Objects with magic Perl SV level magic is not retained, apart from tied values. =back =head1 ATTRIBUTES =over 4 =item intrinsic If true the object will be collapsed without an ID as part of its parent. =back