module Fluent::Plugin::Buffer::Chunk::Decompressable

def append(data, **kwargs)

def append(data, **kwargs)
  if kwargs[:compress] == :gzip
    io = StringIO.new
    Zlib::GzipWriter.wrap(io) do |gz|
      data.each do |d|
        gz.write d
      end
    end
    concat(io.string, data.size)
  else
    super
  end
end

def open(**kwargs, &block)

def open(**kwargs, &block)
  if kwargs[:compressed] == :gzip
    super
  else
    super(kwargs) do |chunk_io|
      output_io = if chunk_io.is_a?(StringIO)
                    StringIO.new
                  else
                    Tempfile.new('decompressed-data')
                  end
      decompress(input_io: chunk_io, output_io: output_io)
      output_io.seek(0, IO::SEEK_SET)
      yield output_io
    end
  end
end

def read(**kwargs)

def read(**kwargs)
  if kwargs[:compressed] == :gzip
    super
  else
    decompress(super)
  end
end

def write_to(io, **kwargs)

def write_to(io, **kwargs)
  open(compressed: :gzip) do |chunk_io|
    if kwargs[:compressed] == :gzip
      IO.copy_stream(chunk_io, io)
    else
      decompress(input_io: chunk_io, output_io: io)
    end
  end
end