The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#===============================================================================
#
#         FILE:  Mapper.pm
#
#         BUGS:  ---
#        NOTES:  ---
#       AUTHOR:  Grishayev Anatoliy (), 
#      COMPANY:  
#      VERSION:  1.0
#      CREATED:  01/24/2011 02:36:47 PM
#     REVISION:  ---
#===============================================================================
package Storable::AMF::Mapper;
use strict;
use Storable::AMF qw(parse_serializator_option);
use Carp qw(croak);

sub new{
	my $class = shift;
	if ( @_ % 2 ){
		croak( "Usage Storable::AMF::Mapper->new( to_amf => 0 | 1, option => ...)");
	}
	my %options = @_;
	my $option_int = parse_serializator_option( 'prefer_number'); 
	if ( my $option_str = delete $options{ option } ){
		$option_int = parse_serializator_option( $option_str );
	}
	if ( delete $options{ to_amf } ){
		$option_int |= 128	;
	}
	if (keys %options ){
		croak( "Unknown option: ". join (" ", keys %options ));
	}
	return $option_int;
}

1;
__END__

=head1 SYNOPSYS 

  use Storable::AMF::Mapper;
  use Storable::AMF0 qw(freeze);

  my $mapper = Storable::AMF::Mapper->new( to_amf =>1 );

  sub T::TO_AMF {
	  my $orig = shift;
	  return { %$orig, some_key_to_be_added => "Key Value" };
  }
  my $obj  = bless { Zeta => 1 }, 'T';

  my $amf0 = freeze( $obj, $mapper); # use TO_AMF method for freezing perl_objects

  my $obj  = thaw( $amf0 ); # $obj = { Zeta=> , some_key_to_be_added => "Key Value" }

=head1 NOTICE

  This Mapper is experimental feature of Storable::AMF distro. So may change in future ...