The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package DTL::Fast::Cache::Compressed;
use strict;
use warnings FATAL => 'all';
use parent 'DTL::Fast::Cache::Serialized';

our %CACHE;

#@Override
sub new
{
    my ( $proto, %kwargs ) = @_;
    require Compress::Zlib;

    return $proto->SUPER::new(%kwargs);
}

#@Override
sub read_serialized_data
{
    my ( $self, $key ) = @_;

    return
        $self->decompress(
            $self->read_compressed_data(
                $key
            )
        );
}

#@Override
sub write_serialized_data
{
    my ( $self, $key, $data ) = @_;

    $self->write_compressed_data(
        $key,
        $self->compress(
            $data
        )
    ) if (defined $data); # don't store undef values
    return $self;
}


sub read_compressed_data { return shift->SUPER::read_serialized_data(@_) };

sub write_compressed_data { return shift->SUPER::write_serialized_data(@_) };

sub compress
{
    my ( $self, $data ) = @_;
    return if (not defined $data);
    return Compress::Zlib::memGzip($data);
}

sub decompress
{
    my ( $self, $data ) = @_;
    return if (not defined $data);
    return Compress::Zlib::memGunzip($data);
}



1;