Badger

 view release on metacpan or  search on metacpan

lib/Badger/Codec.pm  view on Meta::CPAN

#========================================================================
#
# Badger::Codec
#
# DESCRIPTION
#   Base class codec providing a generic API for encoding/decoding data.
#
# AUTHOR
#   Andy Wardley   <abw@wardley.org>
#
#========================================================================

package Badger::Codec;

use Badger::Class
    version => 0.01,
    debug   => 0,
    base    => 'Badger::Base',
    utils   => 'UTILS';

sub encode {
    shift->not_implemented;
}

sub decode {
    shift->not_implemented;
}


# This is the "brute force and ignorance" approach to creating stand-alone
# subroutines.  They get the job done, albeit at the overhead of an extra
# method call.  Subclasses can do something better, like exporting existing
# subrefs directly.

sub encoder {
    my $self = shift;
    return sub { $self->encode(@_) };
}

sub decoder {
    my $self = shift;
    return sub { $self->decode(@_) };
}

1;


__END__

=head1 NAME

Badger::Codec - base class for encoding/decoding data

=head1 SYNOPSIS

    # creating a Badger::Codec subclass
    package My::Codec;
    use base 'Badger::Codec';
    
    sub encode {
        my ($self, $data) = @_;
        # do something
        return $encoded_data;
    }
    
    sub decode {
        my ($self, $encoded_data) = @_;
        # do something
        return $decoded_data;
    }

    # using the subclass:
    use My::Codec;
    
    my $codec   = My::Codec->new();
    my $encoded = $codec->encode($some_data);
    my $decoded = $codec->decode($encoded);

=head1 INTRODUCTION

This documentation describes the inner working of codec modules. You should
only need to consult this documentation if you're writing a codec subclass.
For a general introduction to codecs and examples of use, please see
L<Badger::Codecs>.

=head1 DESCRIPTION



( run in 0.469 second using v1.01-cache-2.11-cpan-98e64b0badf )