File: ZlibStream.pm

package info (click to toggle)
libfurl-perl 3.14-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 660 kB
  • sloc: perl: 2,188; makefile: 5; sh: 1
file content (33 lines) | stat: -rw-r--r-- 842 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package Furl::ZlibStream;
# internal class.
use strict;
use warnings;
use overload '.=' => 'append', fallback => 1;
use Carp ();
use Compress::Raw::Zlib qw(Z_OK Z_STREAM_END);

sub new {
    my ( $class, $buffer ) = @_;

    my ( $zlib, $status ) = Compress::Raw::Zlib::Inflate->new(
        -WindowBits => Compress::Raw::Zlib::WANT_GZIP_OR_ZLIB(), );
    $status == Z_OK
        or Carp::croak("Cannot initialize zlib: $status");

    bless { buffer => $buffer, zlib => $zlib }, $class;
}

sub append {
    my ( $self, $partial ) = @_;

    my $status = $self->{zlib}->inflate( $partial, \my $deflated );
    ($status == Z_OK or $status == Z_STREAM_END)
        or Carp::croak("Uncompress error: $status");
    $self->{buffer} .= $deflated;

    return $self;
}

sub get_response_string { ref $_[0]->{buffer} ? undef : $_[0]->{buffer} }

1;