package CGI::Session::Serialize::Default;

# $Id: Default.pm,v 1.5 2002/11/27 12:26:08 sherzodr Exp $ 
use strict;
use Safe;
use Data::Dumper;

use vars qw($VERSION);

($VERSION) = '$Revision: 1.5 $' =~ m/Revision:\s*(\S+)/;


sub freeze {
    my ($self, $data) = @_;
    
    local $Data::Dumper::Indent   = 0;
    local $Data::Dumper::Purity   = 0;
    local $Data::Dumper::Useqq    = 1;
    local $Data::Dumper::Deepcopy = 0;   
    
    my $d = new Data::Dumper([$data], ["D"]);
    return $d->Dump();    
}



sub thaw {
    my ($self, $string) = @_;    

    # To make -T happy
    my ($safe_string) = $string =~ m/^(.*)$/;
    
    my $D = undef;
    my $cpt = new Safe();
    $D = $cpt->reval ($safe_string );
    if ( $@ ) {
        die $@;
    }

    return $D;
}


1;

=pod

=head1 NAME

CGI::Session::Serialize::Default - default serializer for CGI::Session

=head1 DESCRIPTION

This library is used by CGI::Session driver to serialize session data before storing
it in disk. 

=head1 METHODS

=over 4

=item freeze()

receives two arguments. First is the CGI::Session driver object, the second is the data to be
stored passed as a reference to a hash. Should return true to indicate success, undef otherwise, 
passing the error message with as much details as possible to $self->error()

=item thaw()

receives two arguments. First being CGI::Session driver object, the second is the string
to be deserialized. Should return deserialized data structure to indicate successs. undef otherwise,
passing the error message with as much details as possible to $self->error().

=back

=head1 WARNING

If you want to be able to store objects, consider using L<CGI::Session::Serialize::Storable> or
L<CGI::Session::Serialize::FreezeThaw> instead.

=head1 COPYRIGHT

Copyright (C) 2002 Sherzod Ruzmetov. All rights reserved.

This library is free software. It can be distributed under the same terms as Perl itself. 

=head1 AUTHOR

Sherzod Ruzmetov <sherzodr@cpan.org>

All bug reports should be directed to Sherzod Ruzmetov <sherzodr@cpan.org>. 

=head1 SEE ALSO

=over 4

=item *

L<CGI::Session|CGI::Session> - CGI::Session manual

=item *

L<CGI::Session::Tutorial|CGI::Session::Tutorial> - extended CGI::Session manual

=item *

L<CGI::Session::CookBook|CGI::Session::CookBook> - practical solutions for real life problems

=item *

B<RFC 2965> - "HTTP State Management Mechanism" found at ftp://ftp.isi.edu/in-notes/rfc2965.txt

=item *

L<CGI|CGI> - standard CGI library

=item *

L<Apache::Session|Apache::Session> - another fine alternative to CGI::Session

=back

=cut

