class Faraday::Adapter::Excon

def call(env)

def call(env)
  super
  req_opts = {
    method: env[:method].to_s.upcase,
    headers: env[:request_headers],
    body: read_body(env)
  }
  req = env[:request]
  if req&.stream_response?
    total = 0
    req_opts[:response_block] = lambda do |chunk, _remain, _total|
      req.on_data.call(chunk, total += chunk.size)
    end
  end
  resp = connection(env) { |http| http.request(req_opts) }
  save_response(env, resp.status.to_i, resp.body, resp.headers,
                resp.reason_phrase)
  @app.call(env)
rescue ::Excon::Errors::SocketError => e
  raise Faraday::TimeoutError, e if e.message.match?(/\btimeout\b/)
  raise Faraday::SSLError, e if e.message.match?(/\bcertificate\b/)
  raise Faraday::ConnectionFailed, e
rescue ::Excon::Errors::Timeout => e
  raise Faraday::TimeoutError, e
end