X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FIO%2FCompress%2FBrotli.pm;h=a41c09bda19e2a8f7b292e86dead062173c59bac;hb=acade63e6ac6af20a42ed56867cc3124127c1ad1;hp=aded86be432774a010e1281ffd64d3978328a95f;hpb=9d4f189a64df629bbe70f133ee95934f3dee074a;p=io-compress-brotli.git diff --git a/lib/IO/Compress/Brotli.pm b/lib/IO/Compress/Brotli.pm index aded86b..a41c09b 100644 --- a/lib/IO/Compress/Brotli.pm +++ b/lib/IO/Compress/Brotli.pm @@ -4,8 +4,26 @@ use 5.014000; use strict; use warnings; +use IO::Uncompress::Brotli; + +use parent qw/Exporter/; + +our @EXPORT = qw/bro/; +our @EXPORT_OK = @EXPORT; + our $VERSION = '0.001001'; +my %BROTLI_ENCODER_MODE = ( generic => 0, text => 1, font => 2 ); +sub mode { + my ($self, $mode) = @_; + + die "Invalid encoder mode" + unless $BROTLI_ENCODER_MODE{$mode}; + + _mode($$self, $mode) +} + + 1; __END__ @@ -13,15 +31,103 @@ __END__ =head1 NAME -IO::Compress::Brotli - [Not yet implemented] Write Brotli buffers/streams +IO::Compress::Brotli - Write Brotli buffers/streams =head1 SYNOPSIS use IO::Compress::Brotli; + # compress a buffer + my $encoded = bro $encoded; + + # compress a stream + my $bro = IO::Compress::Brotli->create; + while(have_input()) { + my $block = get_input_block(); + my $encoded_block = $bro->compress($block); + handle_output_block($encoded_block); + } + # Need to finish the steam + handle_output_block($bro->finish()); + =head1 DESCRIPTION -IO::Compress::Brotli currently does nothing. +IO::Compress::Brotli is a module that compressed Brotli buffers +and streams. Despite its name, it is not a subclass of +L and does not implement its interface. This +will be rectified in a future release. + +=head2 One-shot interface + +If you have the whole buffer in a Perl scalar use the B +function. + +=over + +=item B(I<$input>) + +Takes a whole uncompressed buffer as input and returns the compressed +data. + +Exported by default. + +=back + +=head2 Streaming interface + +If you want to process the data in blocks use the object oriented +interface. The available methods are: + +=over + +=item IO::Compress::Brotli->B + +Returns a IO::Compress::Brotli instance. Please note that a single +instance cannot be used to decompress multiple streams. + +=item $bro->B(I<$window>) + +Sets the window parameter on the brotli encoder. +Defaults to BROTLI_DEFAULT_WINDOW (22). + +=item $bro->B(I<$quality>) + +Sets the quality paremeter on the brotli encoder. +Defaults to BROTLI_DEFAULT_QUALITY (11). + +=item $bro->B(I<$mode>) + +Sets the brotli encoder mode, which can be any of "generic", +"text" or "font". Defaults to "generic". + +=item $bro->B(I<$block>) + +Takes the a block of uncompressed data and returns a block of +compressed data. Dies on error. + +=item $bro->B() + +Flushes any pending output from the encoder. + +=item $bro->B() + +Tells the encoder to start the finish operation, and flushes +any remaining compressed output. + +Once finish is called, the encoder cannot be used to compress +any more content. + +B: Calling finish is B, or the output might +remain unflushed, and the be missing termination marks. + +=back + +=head1 SEE ALSO + +Brotli Compressed Data Format Internet-Draft: +L + +Brotli source code: L =head1 AUTHOR