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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
# frozen_string_literal: true
module HTTPX
module Plugins
module Brotli
class Deflater < Transcoder::Deflater
def deflate(chunk)
return unless chunk
::Brotli.deflate(chunk)
end
end
module RequestBodyClassMethods
def initialize_deflater_body(body, encoding)
return Brotli.encode(body) if encoding == "br"
super
end
end
module ResponseBodyClassMethods
def initialize_inflater_by_encoding(encoding, response, **kwargs)
return Brotli.decode(response, **kwargs) if encoding == "br"
super
end
end
module_function
def load_dependencies(*)
require "brotli"
end
def self.extra_options(options)
options.merge(supported_compression_formats: %w[br] + options.supported_compression_formats)
end
def encode(body)
Deflater.new(body)
end
def decode(_response, **)
::Brotli.method(:inflate)
end
end
register_plugin :brotli, Brotli
end
end
|