from hachoir.field import CompressedField

try:
    from zlib import decompressobj, MAX_WBITS

    class DeflateStream:

        def __init__(self, stream, wbits=None):
            if wbits:
                self.gzip = decompressobj(-MAX_WBITS)
            else:
                self.gzip = decompressobj()

        def __call__(self, size, data=None):
            if data is None:
                data = b''
            return self.gzip.decompress(self.gzip.unconsumed_tail + data, size)

    class DeflateStreamWbits(DeflateStream):

        def __init__(self, stream):
            DeflateStream.__init__(self, stream, True)

    def Deflate(field, wbits=True):
        if wbits:
            CompressedField(field, DeflateStreamWbits)
        else:
            CompressedField(field, DeflateStream)
        return field
    has_deflate = True
except ImportError:
    def Deflate(field, wbits=True):
        return field
    has_deflate = False