Full Code of 0x676e67/rquest for AI

main ccf70e4d3cab cached
165 files
1.5 MB
412.0k tokens
2585 symbols
1 requests
Download .txt
Showing preview only (1,601K chars total). Download the full file or copy to clipboard to get everything.
Repository: 0x676e67/rquest
Branch: main
Commit: ccf70e4d3cab
Files: 165
Total size: 1.5 MB

Directory structure:
gitextract_e98nv8b_/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── compilation-guide/
│   │   └── build.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── Cargo.toml
├── LICENSE
├── README.md
├── RELEASE.md
├── bench/
│   ├── http1.rs
│   ├── http1_over_tls.rs
│   ├── http2.rs
│   ├── http2_over_tls.rs
│   ├── support/
│   │   ├── bench.rs
│   │   ├── client.rs
│   │   └── server.rs
│   └── support.rs
├── cliff.toml
├── examples/
│   ├── cert_store.rs
│   ├── connect_via_lower_priority_tokio_runtime.rs
│   ├── emulate.rs
│   ├── form.rs
│   ├── http1_websocket.rs
│   ├── http2_websocket.rs
│   ├── json_dynamic.rs
│   ├── json_typed.rs
│   ├── keylog.rs
│   ├── request_with_emulate.rs
│   ├── request_with_interface.rs
│   ├── request_with_local_address.rs
│   ├── request_with_proxy.rs
│   ├── request_with_redirect.rs
│   ├── request_with_version.rs
│   ├── tor_socks.rs
│   └── unix_socket.rs
├── rustfmt.toml
├── src/
│   ├── client/
│   │   ├── body.rs
│   │   ├── conn/
│   │   │   ├── connector.rs
│   │   │   ├── descriptor.rs
│   │   │   ├── http.rs
│   │   │   ├── proxy/
│   │   │   │   ├── socks.rs
│   │   │   │   └── tunnel.rs
│   │   │   ├── proxy.rs
│   │   │   ├── tcp/
│   │   │   │   └── tokio.rs
│   │   │   ├── tcp.rs
│   │   │   ├── tls_info.rs
│   │   │   ├── uds.rs
│   │   │   └── verbose.rs
│   │   ├── conn.rs
│   │   ├── core/
│   │   │   ├── body/
│   │   │   │   ├── incoming.rs
│   │   │   │   ├── length.rs
│   │   │   │   └── watch.rs
│   │   │   ├── body.rs
│   │   │   ├── conn/
│   │   │   │   ├── http1.rs
│   │   │   │   └── http2.rs
│   │   │   ├── conn.rs
│   │   │   ├── dispatch.rs
│   │   │   ├── error.rs
│   │   │   ├── proto/
│   │   │   │   ├── headers.rs
│   │   │   │   ├── http1/
│   │   │   │   │   ├── buf.rs
│   │   │   │   │   ├── conn.rs
│   │   │   │   │   ├── decode.rs
│   │   │   │   │   ├── dispatch.rs
│   │   │   │   │   ├── encode.rs
│   │   │   │   │   ├── ext.rs
│   │   │   │   │   ├── io.rs
│   │   │   │   │   └── role.rs
│   │   │   │   ├── http1.rs
│   │   │   │   ├── http2/
│   │   │   │   │   ├── client.rs
│   │   │   │   │   └── ping.rs
│   │   │   │   └── http2.rs
│   │   │   ├── proto.rs
│   │   │   ├── rt/
│   │   │   │   ├── bounds.rs
│   │   │   │   ├── timer.rs
│   │   │   │   └── tokio.rs
│   │   │   ├── rt.rs
│   │   │   └── upgrade.rs
│   │   ├── core.rs
│   │   ├── emulate.rs
│   │   ├── future.rs
│   │   ├── group.rs
│   │   ├── layer/
│   │   │   ├── client/
│   │   │   │   ├── exec.rs
│   │   │   │   ├── lazy.rs
│   │   │   │   └── pool.rs
│   │   │   ├── client.rs
│   │   │   ├── config.rs
│   │   │   ├── decoder.rs
│   │   │   ├── redirect/
│   │   │   │   ├── future.rs
│   │   │   │   └── policy.rs
│   │   │   ├── redirect.rs
│   │   │   ├── retry/
│   │   │   │   ├── classify.rs
│   │   │   │   └── scope.rs
│   │   │   ├── retry.rs
│   │   │   ├── timeout/
│   │   │   │   ├── body.rs
│   │   │   │   └── future.rs
│   │   │   └── timeout.rs
│   │   ├── layer.rs
│   │   ├── multipart.rs
│   │   ├── request.rs
│   │   ├── response.rs
│   │   ├── ws/
│   │   │   ├── json.rs
│   │   │   └── message.rs
│   │   └── ws.rs
│   ├── client.rs
│   ├── config.rs
│   ├── cookie.rs
│   ├── dns/
│   │   ├── gai.rs
│   │   ├── hickory.rs
│   │   └── resolve.rs
│   ├── dns.rs
│   ├── error.rs
│   ├── ext.rs
│   ├── header.rs
│   ├── into_uri.rs
│   ├── lib.rs
│   ├── proxy/
│   │   ├── mac.rs
│   │   ├── matcher.rs
│   │   ├── uds.rs
│   │   └── win.rs
│   ├── proxy.rs
│   ├── redirect.rs
│   ├── retry.rs
│   ├── sync.rs
│   ├── tls/
│   │   ├── compress.rs
│   │   ├── conn/
│   │   │   ├── ext.rs
│   │   │   ├── macros.rs
│   │   │   └── service.rs
│   │   ├── conn.rs
│   │   ├── keylog/
│   │   │   └── handle.rs
│   │   ├── keylog.rs
│   │   ├── session.rs
│   │   ├── trust/
│   │   │   ├── identity.rs
│   │   │   ├── parse.rs
│   │   │   └── store.rs
│   │   └── trust.rs
│   ├── tls.rs
│   ├── trace.rs
│   └── util.rs
└── tests/
    ├── badssl.rs
    ├── brotli.rs
    ├── client.rs
    ├── connector_layers.rs
    ├── cookie.rs
    ├── deflate.rs
    ├── emulate.rs
    ├── gzip.rs
    ├── layers.rs
    ├── multipart.rs
    ├── proxy.rs
    ├── redirect.rs
    ├── retry.rs
    ├── support/
    │   ├── crl.pem
    │   ├── delay_server.rs
    │   ├── error.rs
    │   ├── layer.rs
    │   ├── mod.rs
    │   ├── server.cert
    │   ├── server.key
    │   └── server.rs
    ├── timeouts.rs
    ├── unix_socket.rs
    ├── upgrade.rs
    └── zstd.rs

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi:
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: ['https://github.com/0x676e67/0x676e67/blob/main/SPONSOR.md']


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Desktop (please complete the following information):**
 - OS: [e.g. iOS]
 - Browser [e.g. chrome, safari]
 - Version [e.g. 22]

**Smartphone (please complete the following information):**
 - Device: [e.g. iPhone6]
 - OS: [e.g. iOS8.1]
 - Browser [e.g. stock browser, safari]
 - Version [e.g. 22]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/compilation-guide/build.yml
================================================
name: build

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always

jobs:
  linux:
    name: Build Linux (GNU)
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - target: x86_64
            target_triple: x86_64-unknown-linux-gnu
            apt_packages: ""
            custom_env: {}
          - target: i686
            target_triple: i686-unknown-linux-gnu
            apt_packages: crossbuild-essential-i386
            custom_env:
              CC: i686-linux-gnu-gcc
              CXX: i686-linux-gnu-g++
              CARGO_TARGET_I686_UNKNOWN_LINUX_GNU_LINKER: i686-linux-gnu-g++
              RUSTC_LINKER: i686-linux-gnu-g++
          - target: aarch64
            target_triple: aarch64-unknown-linux-gnu
            apt_packages: crossbuild-essential-arm64
            custom_env:
              CFLAGS_aarch64_unknown_linux_gnu: -D__ARM_ARCH=8
              CC: aarch64-linux-gnu-gcc
              CXX: aarch64-linux-gnu-g++
              CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-g++
              RUSTC_LINKER: aarch64-linux-gnu-g++
          - target: armv7
            target_triple: armv7-unknown-linux-gnueabihf
            apt_packages: crossbuild-essential-armhf
            custom_env:
              CC: arm-linux-gnueabihf-gcc
              CXX: arm-linux-gnueabihf-g++
              CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-g++
              RUSTC_LINKER: arm-linux-gnueabihf-g++
    steps:
      - uses: actions/checkout@v4

      - name: Install base dependencies on Ubuntu
        run: |
          sudo apt-get update
          sudo apt-get install -y build-essential cmake perl pkg-config libclang-dev musl-tools

      - name: Install target-specific APT dependencies
        if: ${{ matrix.apt_packages != '' }}
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ matrix.apt_packages }}

      - name: Add Rust target
        run: rustup target add ${{ matrix.target_triple }}

      - name: Build for ${{ matrix.target }}
        env: ${{ matrix.custom_env }}
        run: cargo build --release --target ${{ matrix.target_triple }}

      - name: Archive build artifacts
        run: |
          cd target/${{ matrix.target_triple }}/release
          zip -r ../../../build-linux-${{ matrix.target }}.zip *
        working-directory: ${{ github.workspace }}

      - name: Upload build artifact
        uses: actions/upload-artifact@v4
        with:
          name: build-linux-${{ matrix.target }}
          path: build-linux-${{ matrix.target }}.zip
          retention-days: 1

  musllinux:
    name: Build Linux (musl)
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - target: x86_64
            target_triple: x86_64-unknown-linux-musl
            package: x86_64-linux-musl-cross
            apt_packages: ""
            custom_env:
              CC: x86_64-linux-musl-gcc
              CXX: x86_64-linux-musl-g++
              CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER: x86_64-linux-musl-g++
              RUSTC_LINKER: x86_64-linux-musl-g++
          - target: aarch64
            target_triple: aarch64-unknown-linux-musl
            package: aarch64-linux-musl-cross
            apt_packages: crossbuild-essential-arm64
            custom_env:
              CC: aarch64-linux-musl-gcc
              CXX: aarch64-linux-musl-g++
              CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-musl-g++
              RUSTC_LINKER: aarch64-linux-musl-g++
          - target: i686
            target_triple: i686-unknown-linux-musl
            package: i686-linux-musl-cross
            apt_packages: crossbuild-essential-i386
            custom_env:
              CC: i686-linux-musl-gcc
              CXX: i686-linux-musl-g++
              CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER: i686-linux-musl-g++
              RUSTC_LINKER: i686-linux-musl-g++
          - target: armv7
            target_triple: armv7-unknown-linux-musleabihf
            package: armv7l-linux-musleabihf-cross
            apt_packages: crossbuild-essential-armhf
            custom_env:
              CC: armv7l-linux-musleabihf-gcc
              CXX: armv7l-linux-musleabihf-g++
              CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER: armv7l-linux-musleabihf-g++
              RUSTC_LINKER: armv7l-linux-musleabihf-g++

    steps:
      - uses: actions/checkout@v4

      - name: Install base dependencies on Ubuntu
        run: |
          sudo apt-get update
          sudo apt-get install -y build-essential cmake perl pkg-config libclang-dev musl-tools

      - name: Install target-specific APT dependencies
        if: ${{ matrix.apt_packages != '' }}
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ matrix.apt_packages }}

      - name: Prepare musl cross-compiler
        run: |
          wget https://github.com/musl-cc/musl.cc/releases/latest/download/${{ matrix.package }}.tgz
          tar xzf ${{ matrix.package }}.tgz -C /opt
          echo "/opt/${{ matrix.package }}/bin/" >> $GITHUB_PATH

      - name: Add Rust target
        run: rustup target add ${{ matrix.target_triple }}

      - name: Build for ${{ matrix.target }}
        env: ${{ matrix.custom_env }}
        run: cargo build --release --target ${{ matrix.target_triple }}

      - name: Archive build artifacts
        run: |
          cd target/${{ matrix.target_triple }}/release
          zip -r ../../../build-musllinux-${{ matrix.target }}.zip *
        working-directory: ${{ github.workspace }}

      - name: Upload build artifact
        uses: actions/upload-artifact@v4
        with:
          name: build-musllinux-${{ matrix.target }}
          path: build-musllinux-${{ matrix.target }}.zip
          retention-days: 1

  windows:
    name: Build Windows
    runs-on: windows-latest
    strategy:
      matrix:
        include:
          - target: x86_64
            target_triple: x86_64-pc-windows-msvc
          - target: i686
            target_triple: i686-pc-windows-msvc
    steps:
      - uses: actions/checkout@v4

      - name: Install dependencies on Windows
        run: |
          choco install cmake -y
          choco install strawberryperl -y
          choco install pkgconfiglite -y
          choco install llvm -y
          choco install nasm -y
        shell: cmd

      - name: Build on Windows with Static Linking
        env:
          RUSTFLAGS: "-C target-feature=+crt-static"
        run: cargo build --release --target ${{ matrix.target_triple }}

      - name: Archive build artifacts
        shell: pwsh
        run: |
          Compress-Archive -Path 'target\${{ matrix.target_triple }}\release\*' -DestinationPath "build-windows-${{ matrix.target }}.zip" -CompressionLevel Optimal -Force
        working-directory: ${{ github.workspace }}

      - name: Upload build artifact
        uses: actions/upload-artifact@v4
        with:
          name: build-windows-${{ matrix.target }}
          path: build-windows-${{ matrix.target }}.zip
          retention-days: 1

  macos:
    name: Build macOS
    strategy:
      matrix:
        include:
          - target: x86_64
            runner: macos-latest
            target_triple: x86_64-apple-darwin
          - target: aarch64
            runner: macos-latest
            target_triple: aarch64-apple-darwin
    runs-on: ${{ matrix.runner }}
    steps:
      - uses: actions/checkout@v4

      - name: Install dependencies on macOS
        run: |
          brew update
          brew install --formula cmake pkg-config llvm

      - name: Add Rust target
        run: rustup target add ${{ matrix.target_triple }}

      - name: Build for ${{ matrix.target }}
        run: cargo build --release --target ${{ matrix.target_triple }}

      - name: Archive build artifacts
        run: |
          cd target/${{ matrix.target_triple }}/release
          zip -r ../../../build-macos-${{ matrix.target }}.zip *
        working-directory: ${{ github.workspace }}

      - name: Upload build artifact
        uses: actions/upload-artifact@v4
        with:
          name: build-macos-${{ matrix.target }}
          path: build-macos-${{ matrix.target }}.zip
          retention-days: 1


================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
  - package-ecosystem: "github-actions"
    # Workflow files stored in the
    # default location of `.github/workflows`
    directory: "/"
    schedule:
      interval: "weekly"
  - package-ecosystem: "cargo"
    directory: "/"
    schedule:
      interval: "weekly"
    # todo: if only this worked, see https://github.com/dependabot/dependabot-core/issues/4009
    # only tell us if there's a new 'breaking' change we could upgrade to
    # versioning-strategy: increase-if-necessary
    # disable regular version updates, security updates are unaffected
    open-pull-requests-limit: 0


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on:
  push:
    tags: ["v*"]
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '*.md'
      - '.github/**'
      - 'README.md'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: true

permissions:
  contents: write
  packages: write

jobs:
  style:
    name: Style
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          components: rustfmt, clippy
      - name: Style check
        run: cargo fmt --all -- --check
      - name: Clippy check
        run: cargo clippy --all-targets --all-features -- -D warnings

  docs:
    name: Docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - name: Build docs
        run: cargo doc --document-private-items --all-features

  hack:
    name: Hack
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - uses: Swatinem/rust-cache@v2
      - name: Install cargo-hack from crates.io
        uses: baptiste0928/cargo-install@v3
        with:
          crate: cargo-hack
      - name: Run hack script
        run: cargo hack check --each-feature

  msrv:
    name: MSRV
    needs: [style]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
      - name: Resolve MSRV aware dependencies
        run: cargo update
        env:
          CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
      - name: Get MSRV package metadata
        id: metadata
        run: cargo metadata --no-deps --format-version 1 | jq -r '"msrv=" + .packages[0].rust_version' >> $GITHUB_OUTPUT
      - name: Install rust (${{ steps.metadata.outputs.msrv }})
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ steps.metadata.outputs.msrv }}
      - uses: Swatinem/rust-cache@v2
      - name: Check
        run: cargo check

  test:
    name: Test
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        feature-set:
          - "--all-features"
          - "--no-default-features"
          - "--no-default-features --features webpki-roots"
          - "--no-default-features --features form"
          - "--no-default-features --features query"
          - "--features cookies"
          - "--features gzip,stream"
          - "--features brotli,stream"
          - "--features zstd,stream"
          - "--features deflate,stream"
          - "--features json"
          - "--features multipart"
          - "--features stream"
          - "--features hickory-dns"
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@v2
        with:
          tool: cargo-nextest
      - name: Run tests (${{ matrix.feature-set }})
        run: cargo nextest run --workspace ${{ matrix.feature-set }}

  build:
    name: Build (${{ matrix.env }})
    runs-on: ${{ matrix.os }}
    environment: ${{ matrix.env }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            env: Linux
          - os: windows-latest
            env: Windows
          - os: macos-latest
            env: macOS
          - os: ubuntu-latest
            env: Android
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - name: Install NASM (Windows)
        if: matrix.os == 'windows-latest'
        run: choco install nasm -y
      - name: Build
        if: matrix.env != 'Android'
        run: cargo build --all-features
      - name: Add Android targets
        if: matrix.env == 'Android'
        run: rustup target add aarch64-linux-android x86_64-linux-android
      - uses: nttld/setup-ndk@v1.6.0
        if: matrix.env == 'Android'
        id: setup-ndk
        with:
          ndk-version: r27c
          add-to-path: true
      - name: Build with cargo-ndk
        if: matrix.env == 'Android'
        env:
          ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
          ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
        run: |
          cargo install cargo-ndk
          cargo ndk -t arm64-v8a -t x86_64 build --all-features

  release:
    name: Release
    needs: [style, test, docs, hack, msrv, build]
    runs-on: ubuntu-latest
    environment: Release
    if: startsWith(github.ref, 'refs/tags/')
    steps:
      - uses: actions/checkout@v6
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - uses: katyo/publish-crates@v2
        with:
          registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
          ignore-unpublished-changes: true
      - name: Upload binaries to GitHub Release
        uses: softprops/action-gh-release@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') }}
          generate_release_notes: true

================================================
FILE: .gitignore
================================================
# Generated by Cargo
# will have compiled files and executables
target
Cargo.lock
*.swp
.history
.vscode
.direnv
result
curl
**/*.rs.bk
/.DS_Store
keylog.txt
*.json
.zed
*.log

# These are backup files generated by rustfmt
**/*.rs.bk

# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb

# Generated by cargo mutants
# Contains mutation testing data
**/mutants.out*/

# RustRover
#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
#  and can be added to the global gitignore or merged into this file.  For a more nuclear
#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/


================================================
FILE: Cargo.toml
================================================
[package]
name = "wreq"
version = "6.0.0-rc.28"
description = "An ergonomic Rust HTTP Client with TLS fingerprint"
keywords = ["http", "client", "websocket", "ja3", "ja4"]
categories = ["web-programming::http-client"]
repository = "https://github.com/0x676e67/wreq"
documentation = "https://docs.rs/wreq"
authors = ["0x676e67 <gngppz@gmail.com>"]
readme = "README.md"
license = "Apache-2.0"
edition = "2024"
rust-version = "1.85"
include = ["README.md", "LICENSE", "src/**/*.rs"]

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
targets = ["x86_64-unknown-linux-gnu"]

[features]
default = ["webpki-roots"]

# Enable support for decoding text.
charset = ["dep:encoding_rs", "dep:mime"]

# Enable cookies store support.
cookies = ["dep:cookie"]

# Enable gzip decompression support.
gzip = ["dep:tower-http", "tower-http?/decompression-gzip"]

# Enable brotli decompression support.
brotli = ["dep:tower-http", "tower-http?/decompression-br"]

# Enable zstd decompression support.
zstd = ["dep:tower-http", "tower-http?/decompression-zstd"]

# Enable deflate decompression support.
deflate = ["dep:tower-http", "tower-http?/decompression-deflate"]

# Enable URL query string serialization support.
query = ["dep:serde", "dep:serde_html_form"]

# Enable x-www-form-urlencoded form support.
form = ["dep:serde", "dep:serde_html_form"]

# Enable JSON support.
json = ["dep:serde", "dep:serde_json"]

# Enable multipart/form-data support.
multipart = ["dep:mime_guess", "dep:sync_wrapper", "sync_wrapper?/futures"]

# Enable hickory DNS resolver.
hickory-dns = ["dep:hickory-resolver"]

# Enable streaming support.
stream = ["tokio/fs", "dep:sync_wrapper", "sync_wrapper?/futures"]

# Enable SOCKS/4/5 proxy support.
socks = ["dep:tokio-socks"]

# Enable WebSocket support.
ws = ["dep:tokio-tungstenite", "tokio-tungstenite?/handshake"]

# Enable webpki-roots for TLS certificate validation.
webpki-roots = ["dep:webpki-root-certs"]

# Use the system's proxy configuration.
system-proxy = ["dep:system-configuration", "dep:windows-registry"]

# Enable tracing logging.
tracing = ["dep:tracing", "http2/tracing", "tracing?/std"]

# Enables the `parking_lot` crate for synchronization primitives.
parking_lot = ["dep:parking_lot", "http2/parking_lot"]

# Prefix BoringSSL symbols in libcrypto/libssl to avoid linker conflicts
# when multiple OpenSSL versions coexist in the same process.
prefix-symbols = ["btls/prefix-symbols"]

[dependencies]
percent-encoding = "2.3.2"
url = "2.5.8"
bytes = "1.11.1"
http = "1.4.0"
http2 = { version = "0.5.16", features = ["unstable"] }
httparse = "1.10.1"
http-body = "1.0.1"
http-body-util = "0.1.3"
want = "0.3.1"
pin-project-lite = "0.2.17"
futures-util = { version = "0.3.32", default-features = false }
smallvec = { version = "1.15.1", features = ["const_generics", "const_new"] }
socket2 = { version = "0.6.3", features = ["all"] }
ipnet = "2.12.0"
lru = "0.17.0"
btls = "0.5.6"
btls-sys = "0.5.6"
tokio-btls = "0.5.6"
tokio = { version = "1.52.1", default-features = false, features = [
    "net",
    "time",
    "rt",
] }
tokio-util = { version = "0.7.18", default-features = false }
tower = { version = "0.5.3", default-features = false, features = [
    "timeout",
    "util",
    "retry",
] }

# Optional deps...

## serde
serde = { version = "1.0", optional = true }
serde_json = { version = "1.0", optional = true }
serde_html_form = { version = "0.4.0", optional = true }

## multipart
mime_guess = { version = "2.0", default-features = false, optional = true }

## charset
encoding_rs = { version = "0.8", optional = true }
mime = { version = "0.3.17", optional = true }

## sync wrapper
sync_wrapper = { version = "1.0.2", optional = true }

## webpki root certs
webpki-root-certs = { version = "1.0.7", optional = true }

## cookies
cookie = { version = "0.18", optional = true }

## tower http
tower-http = { version = "0.6.8", default-features = false, optional = true }

## socks
tokio-socks = { version = "0.5.2", optional = true }

## websocket
tokio-tungstenite = { version = "0.29.0", default-features = false, optional = true }

## hickory-dns
hickory-resolver = { version = "0.26.0", optional = true }

## parking_lot
parking_lot = { version = "0.12.5", optional = true }

## tracing
tracing = { version = "0.1", default-features = false,optional = true }

## windows
[target.'cfg(windows)'.dependencies]
windows-registry = { version = "0.6.0", optional = true }

## macOS
[target.'cfg(target_os = "macos")'.dependencies]
system-configuration = { version = "0.7.0", optional = true }

## interface binding
[target.'cfg(unix)'.dependencies]
libc = "0.2.182"

[dev-dependencies]
hyper = { version = "1.7.0", default-features = false, features = [
    "http1",
    "http2",
    "server",
] }
hyper-util = { version = "0.1.20", features = [
    "http1",
    "http2",
    "server-auto",
    "server-graceful",
    "tokio",
] }
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.0", default-features = false, features = [
    "macros",
    "rt-multi-thread",
] }
futures = { version = "0.3.0", default-features = false, features = ["std"] }
tower = { version = "0.5.2", default-features = false, features = ["limit"] }
tokio-test = "0.4.5"
tracing = "0.1"
tracing-subscriber = "0.3.20"
pretty_env_logger = "0.5"
brotli = "8.0.2"
flate2 = "1.1.9"
zstd = "0.13.3"

# for benchmarks
sysinfo = { version = "0.38.2", default-features = false, features = ["system"] }
criterion = { version = "0.8.2", features = ["async_tokio"] }
reqwest = { version = "0.13", default-features = false, features = ["rustls", "stream", "http2"] }

[profile.bench]
opt-level = 3
codegen-units = 1
incremental = false

[[bench]]
name = "http1"
path = "bench/http1.rs"
harness = false
required-features = ["stream"]

[[bench]]
name = "http2"
path = "bench/http2.rs"
harness = false
required-features = ["stream"]

[[bench]]
name = "http1_over_tls"
path = "bench/http1_over_tls.rs"
harness = false
required-features = ["stream"]

[[bench]]
name = "http2_over_tls"
path = "bench/http2_over_tls.rs"
harness = false
required-features = ["stream"]

[[test]]
name = "cookie"
path = "tests/cookie.rs"
required-features = ["cookies"]

[[test]]
name = "gzip"
path = "tests/gzip.rs"
required-features = ["gzip", "stream"]

[[test]]
name = "brotli"
path = "tests/brotli.rs"
required-features = ["brotli", "stream"]

[[test]]
name = "zstd"
path = "tests/zstd.rs"
required-features = ["zstd", "stream"]

[[test]]
name = "deflate"
path = "tests/deflate.rs"
required-features = ["deflate", "stream"]

[[test]]
name = "multipart"
path = "tests/multipart.rs"
required-features = ["multipart", "stream"]

[[test]]
name = "retry"
path = "tests/retry.rs"

[[example]]
name = "json_dynamic"
path = "examples/json_dynamic.rs"
required-features = ["json"]

[[example]]
name = "json_typed"
path = "examples/json_typed.rs"
required-features = ["json"]

[[example]]
name = "tor_socks"
path = "examples/tor_socks.rs"
required-features = ["socks"]

[[example]]
name = "form"
path = "examples/form.rs"
required-features = ["form"]

[[example]]
name = "connect_via_lower_priority_tokio_runtime"
path = "examples/connect_via_lower_priority_tokio_runtime.rs"
required-features = ["tracing"]

[[example]]
name = "emulate"
path = "examples/emulate.rs"
required-features = ["gzip", "brotli", "zstd", "deflate", "tracing"]

[[example]]
name = "cert_store"
path = "examples/cert_store.rs"
required-features = ["webpki-roots"]

[[example]]
name = "request_with_redirect"
path = "examples/request_with_redirect.rs"

[[example]]
name = "request_with_version"
path = "examples/request_with_version.rs"

[[example]]
name = "request_with_proxy"
path = "examples/request_with_proxy.rs"
required-features = ["socks"]

[[example]]
name = "request_with_emulate"
path = "examples/request_with_emulate.rs"
required-features = ["gzip", "brotli", "zstd", "deflate", "tracing"]

[[example]]
name = "request_with_local_address"
path = "examples/request_with_local_address.rs"

[[example]]
name = "request_with_interface"
path = "examples/request_with_interface.rs"

[[example]]
name = "http1_websocket"
path = "examples/http1_websocket.rs"
required-features = ["ws", "futures-util/std"]

[[example]]
name = "http2_websocket"
path = "examples/http2_websocket.rs"
required-features = ["ws", "futures-util/std"]

[[example]]
name = "keylog"
path = "examples/keylog.rs"

[[example]]
name = "unix_socket"
path = "examples/unix_socket.rs"



================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2016 Sean McArthur
   Copyright 2026 0x676e67 <gngppz@gmail.com>

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# wreq

[![CI](https://github.com/0x676e67/wreq/actions/workflows/ci.yml/badge.svg)](https://github.com/0x676e67/wreq/actions/workflows/ci.yml)
[![Crates.io License](https://img.shields.io/crates/l/wreq)](https://github.com/0x676e67/wreq/blob/main/LICENSE)
[![Crates.io MSRV](https://img.shields.io/crates/msrv/wreq?logo=rust)](https://crates.io/crates/wreq)
[![crates.io](https://img.shields.io/crates/v/wreq.svg?logo=rust)](https://crates.io/crates/wreq)
[![Discord chat][discord-badge]][discord-url]

[discord-badge]: https://img.shields.io/discord/1486741856397164788.svg?logo=discord
[discord-url]: https://discord.gg/rfbvyFkgq3

> 🚀 Help me work seamlessly with open source sharing by [sponsoring me on GitHub](https://github.com/0x676e67/0x676e67/blob/main/SPONSOR.md)

An ergonomic and modular Rust HTTP Client for high-fidelity protocol matching, featuring customizable TLS, JA3/JA4, and HTTP/2 signature capabilities.

## Features

- Plain bodies, JSON, urlencoded, multipart
- HTTP Trailer
- Cookie Store
- Redirect Policy
- Original Header
- Rotating Proxies
- Tower Middleware
- WebSocket Upgrade
- HTTPS via BoringSSL
- HTTP/2 over TLS Parity
- Certificate Store (CAs & mTLS)

## Example

The following example uses the [Tokio](https://tokio.rs) runtime with optional features enabled by adding this to your `Cargo.toml`:

```toml
[dependencies]
tokio = { version = "1", features = ["full"] }
wreq = "6.0.0-rc.28"
wreq-util = "3.0.0-rc.10"
```

And then the code:

```rust
use wreq::Client;
use wreq_util::Emulation;

#[tokio::main]
async fn main() -> wreq::Result<()> {
    // Build a client
    let client = Client::builder()
        .emulation(Emulation::Safari26)
        .build()?;

    // Use the API you're already familiar with
    let resp = client.get("https://tls.peet.ws/api/all").send().await?;
    println!("{}", resp.text().await?);
    Ok(())
}
```

## Behavior

- **HTTP/1 over TLS**

In the Rust ecosystem, most HTTP clients rely on the [http](https://github.com/hyperium/http) library, which performs well but does not preserve header case. This causes some **WAFs** to reject **HTTP/1** requests with lowercase headers (see [discussion](https://github.com/seanmonstar/reqwest/discussions/2227)). **wreq** addresses this by fully supporting **HTTP/1** header case sensitivity.

- **HTTP/2 over TLS**

Due to the complexity of **TLS** encryption and the widespread adoption of **HTTP/2**, browser fingerprints such as **JA3**, **JA4**, and **Akamai** cannot be reliably emulated using simple fingerprint strings. Instead of parsing and emulating these string-based fingerprints, **wreq** provides fine-grained control over **TLS** and **HTTP/2** extensions and settings for precise browser behavior emulation.

- **Device Emulation**

**TLS** and **HTTP/2** fingerprints are often identical across various browser models because these underlying protocols evolve slower than browser release cycles. **100+ browser device emulation profiles** are maintained in [wreq-util](https://github.com/0x676e67/wreq-util).

## Building

Compiling alongside **openssl-sys** can cause symbol conflicts with **boringssl** that lead to [link failures](https://github.com/cloudflare/boring/issues/197), and on **Linux** and **Android** this can be avoided by enabling the **`prefix-symbols`** feature.

Install [BoringSSL build dependencies](https://github.com/google/boringssl/blob/master/BUILDING.md#build-prerequisites) and build with:

```bash
sudo apt-get install build-essential cmake perl pkg-config libclang-dev musl-tools git -y
cargo build --release
```

This GitHub Actions [workflow](.github/compilation-guide/build.yml) can be used to compile the project on **Linux**, **Windows**, and **macOS**.

## Services

Help sustain the ongoing development of this open-source project by reaching out for [commercial support](mailto:gngppz@gmail.com). Receive private guidance, expert reviews, or direct access to the maintainer, with personalized technical assistance tailored to your needs.

## License

Licensed under either of Apache License, Version 2.0 ([LICENSE](./LICENSE) or http://www.apache.org/licenses/LICENSE-2.0).

## Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the [Apache-2.0](./LICENSE) license, shall be licensed as above, without any additional terms or conditions.

## Sponsors

<a href="https://captcha.fun/?utm_source=github&utm_medium=readme&utm_campaign=wreq" target="_blank"><img src="https://www.captcha.fun/banner.jpg" height="47" width="149"></a>

**Solve reCAPTCHA in less than 2 seconds**

**[Captcha.fun](https://captcha.fun/?utm_source=github&utm_medium=readme&utm_campaign=wreq)** delivers fast, reliable CAPTCHA solving built for automation at scale.

With simple API integration, consistent performance, and competitive pricing, it's an easy way to keep your workflows moving without delays—use code **`WREQ`** for **10% bonus credits**.

**[Dashboard](https://dash.captcha.fun/)** | **[Docs](http://docs.captcha.fun/)** | **[Discord](https://discord.gg/captchafun)**

---

<a href="https://hypersolutions.co/?utm_source=github&utm_medium=readme&utm_campaign=wreq" target="_blank"><img src="https://raw.githubusercontent.com/0x676e67/wreq/main/.github/assets/hypersolutions.jpg" height="47" width="149"></a>

TLS fingerprinting alone isn't enough for modern bot protection. **[Hyper Solutions](https://hypersolutions.co?utm_source=github&utm_medium=readme&utm_campaign=wreq)** provides the missing piece - API endpoints that generate valid antibot tokens for:

**Akamai** • **DataDome** • **Kasada** • **Incapsula**

No browser automation. Just simple API calls that return the exact cookies and headers these systems require.

**[Dashboard](https://hypersolutions.co?utm_source=github&utm_medium=readme&utm_campaign=wreq)** | **[Docs](https://docs.justhyped.dev)** | **[Discord](https://discord.gg/akamai)**

## Accolades

A hard fork of [reqwest](https://github.com/seanmonstar/reqwest).


================================================
FILE: RELEASE.md
================================================
## [unreleased]

### Features

- *(cookie)* RFC 9113 compliant cookie handling ([#1106](https://github.com/0x676e67/wreq/issues/1106)) - ([81f3adb](https://github.com/0x676e67/wreq/commit/81f3adb85e0fff869439bd4eac48405e78916c9a))
- *(cookie)* Fill missing domain/path in `get_all` from stored scope ([#1082](https://github.com/0x676e67/wreq/issues/1082)) - ([240d84e](https://github.com/0x676e67/wreq/commit/240d84eab5eb4df8548933ee2c13337d86e1afe1))
- *(multipart)* Add Form::set_boundary for custom boundaries ([#1094](https://github.com/0x676e67/wreq/issues/1094)) - ([30adda1](https://github.com/0x676e67/wreq/commit/30adda14d21824f5b6c8b7817d0da76a4876b007))
- *(tls)* Allow pluggable TLS session cache ([#1101](https://github.com/0x676e67/wreq/issues/1101)) - ([98c1306](https://github.com/0x676e67/wreq/commit/98c130643afca83b15811d42466011900d672bc4))

### Bug Fixes

- *(bench)* Fix CPU sysinfo reading in benchmark ([#1080](https://github.com/0x676e67/wreq/issues/1080)) - ([7882497](https://github.com/0x676e67/wreq/commit/78824973f82de07f86528a4e5df1cf99f313d325))
- *(http2)* Prevent panic when calling to_str on non-UTF8 headers ([#1070](https://github.com/0x676e67/wreq/issues/1070)) - ([2aa4b16](https://github.com/0x676e67/wreq/commit/2aa4b1601ec22aea0ef5eb1b97e566a217194351))
- *(rt)* Support fake time in legacy client and TokioTimer ([#1064](https://github.com/0x676e67/wreq/issues/1064)) - ([29acebc](https://github.com/0x676e67/wreq/commit/29acebcdc16b1cec24f0547e6d381e512322edd9))
- *(tcp)* Restore the missing TCP nodelay setting ([#1102](https://github.com/0x676e67/wreq/issues/1102)) - ([7ea12ed](https://github.com/0x676e67/wreq/commit/7ea12ede38a6617772cf5b66342d3b6f9c2ff7cb))
- Disable Nagle's algorithm to resolve HTTP/2 performance dip ([#1074](https://github.com/0x676e67/wreq/issues/1074)) - ([8f45ef4](https://github.com/0x676e67/wreq/commit/8f45ef41eb5738d07947e6b78917488680332213))

### Refactor

- *(conn)* Modular connector component ([#1100](https://github.com/0x676e67/wreq/issues/1100)) - ([6cf1279](https://github.com/0x676e67/wreq/commit/6cf1279d4a0b40075942692687c967b5da4292c7))
- *(multipart)* Streamline legacy Form implementation - ([45df222](https://github.com/0x676e67/wreq/commit/45df2228715df1ecbe8e35866f1ec3a82cd4e106))
- *(pool)* Redesign emulation and pool ID strategy ([#1103](https://github.com/0x676e67/wreq/issues/1103)) - ([c12f3a0](https://github.com/0x676e67/wreq/commit/c12f3a0d8e6dfd4536acb46bf2d318b2cd022aac))
- *(tls)* Decouple TLS backend logic into sub-modules ([#1105](https://github.com/0x676e67/wreq/issues/1105)) - ([c7a7e3c](https://github.com/0x676e67/wreq/commit/c7a7e3c94a40368894d4a63a959eb633c3a292f1))
- *(tls)* Expose certificate compression APIs ([#1085](https://github.com/0x676e67/wreq/issues/1085)) - ([8429954](https://github.com/0x676e67/wreq/commit/842995411c9262b04260137c588084340e59133e))

### Documentation

- *(hash)* Simplify documentation for `HashMemo` creation ([#1076](https://github.com/0x676e67/wreq/issues/1076)) - ([fe85f5d](https://github.com/0x676e67/wreq/commit/fe85f5d8972322fe76fdea8317563c730cce319f))
- Remove deprecated doc_cfg feature conditionally - ([29da566](https://github.com/0x676e67/wreq/commit/29da5662789a9ef8092943a29912dbb77cdde275))
- Clarify symbol conflict with OpenSSL ([#1068](https://github.com/0x676e67/wreq/issues/1068)) - ([ee2f9f0](https://github.com/0x676e67/wreq/commit/ee2f9f0cf0ab1faf6f56f85ca1a582f576c5f56f))

### Performance

- *(bench)* Optimize benchmark server ([#1073](https://github.com/0x676e67/wreq/issues/1073)) - ([bd8cd36](https://github.com/0x676e67/wreq/commit/bd8cd36084b0367a35d949355b12d5224ea800c0))
- *(buf)* Make `BufList::remaining` O(1) by caching length ([#1091](https://github.com/0x676e67/wreq/issues/1091)) - ([aaed745](https://github.com/0x676e67/wreq/commit/aaed745799bddacd91e62d373e64ab753ea2d8ee))
- *(error)* Hint compiler to inline trivial error-handling functions ([#1061](https://github.com/0x676e67/wreq/issues/1061)) - ([7746f74](https://github.com/0x676e67/wreq/commit/7746f74c3749116a3e2148a59771c8219077e94b))
- *(http1)* Eliminate `ParserConfig` clones on the HTTP/1.1 request hot path ([#1088](https://github.com/0x676e67/wreq/issues/1088)) - ([9edb950](https://github.com/0x676e67/wreq/commit/9edb95002b121b914dd6cc2f8004f55ba6f2e8bf))
- *(http2)* Backport and apply hyper client's H2 configuration ([#1063](https://github.com/0x676e67/wreq/issues/1063)) - ([6e2f160](https://github.com/0x676e67/wreq/commit/6e2f160e6ddc9b59a8e3de64fb487f5a47f428e8))
- *(multipart)* Improve memory layout of `multipart::Form` ([#1095](https://github.com/0x676e67/wreq/issues/1095)) - ([ff44181](https://github.com/0x676e67/wreq/commit/ff4418136e8529a5dedbe008d2dee24441ee232a))
- *(request)* Static init for common content-type header ([#1060](https://github.com/0x676e67/wreq/issues/1060)) - ([1e45fc5](https://github.com/0x676e67/wreq/commit/1e45fc557721de2d0d483cb00ccc38fe59aeb9a0))
- *(response)* Hint compiler to inline trivial response-handling functions ([#1062](https://github.com/0x676e67/wreq/issues/1062)) - ([be87bb8](https://github.com/0x676e67/wreq/commit/be87bb85646817cdb6c356ae8efa6eec587fac03))

### Styling

- *(bench)* Fmt code - ([c6e6726](https://github.com/0x676e67/wreq/commit/c6e6726f2f70c19dc898110af1a3b2131379036a))
- *(request)* Fmt imports for request.rs file - ([2c51823](https://github.com/0x676e67/wreq/commit/2c518232f713827bf3be31c4823d76127566c63a))

### Miscellaneous Tasks

- *(bench)* Update mod benchmark comment - ([f987254](https://github.com/0x676e67/wreq/commit/f987254db8d3f44aa4538bc4436ac7daa8aa608d))
- *(bench)* Format expected error annotations - ([7131366](https://github.com/0x676e67/wreq/commit/71313662072bad0fa18ed8c0a4d921c7ce706499))
- *(client)* Fmt code - ([21f27bc](https://github.com/0x676e67/wreq/commit/21f27bc22fb1304cb77ffa52acd3d12bdc56dcfe))
- *(conn)* Optimize `ConnectionId` cloning ([#1108](https://github.com/0x676e67/wreq/issues/1108)) - ([1a58655](https://github.com/0x676e67/wreq/commit/1a58655420f9b2c771cb433bf2e2a1d0b5158ad5))
- *(core)* Clear code - ([9411b19](https://github.com/0x676e67/wreq/commit/9411b19d16d1dee6b66657dc681c96c89394fe6f))
- *(tcp)* Prune redundant local address handling ([#1107](https://github.com/0x676e67/wreq/issues/1107)) - ([6a2f343](https://github.com/0x676e67/wreq/commit/6a2f343d280ecc9e40864a85d9b31d44de84ae36))
- Fmt code - ([69c7a76](https://github.com/0x676e67/wreq/commit/69c7a76b483695ebeaf8deded1bb74a655d11602))
- Fmt import - ([e96a759](https://github.com/0x676e67/wreq/commit/e96a7592ad957efd8e0d0cda3d2ccd6406694356))
- Update comments for compression support dependencies - ([3f154d3](https://github.com/0x676e67/wreq/commit/3f154d323ff71e7b4ad38c44a90373e6a5aa9569))
- Refactor `Cargo.toml` for clarity and organization - ([b272408](https://github.com/0x676e67/wreq/commit/b27240866ad81f29616186243ac5a49cf0d165b8))
- Lint core ([#1071](https://github.com/0x676e67/wreq/issues/1071)) - ([6ed8212](https://github.com/0x676e67/wreq/commit/6ed8212248bfd7085b56f3ff4330acb929d066bf))
- Fix clippy - ([cf29946](https://github.com/0x676e67/wreq/commit/cf2994669b1be87d3fc5555a5a5179acb54d62d5))

### Bench

- Add missing `TokioTimer` to http1 server builder ([#1081](https://github.com/0x676e67/wreq/issues/1081)) - ([cacd004](https://github.com/0x676e67/wreq/commit/cacd0046acb3051e1f227678a17a972a08a841e4))
- Format benchmark group labels - ([63f9e39](https://github.com/0x676e67/wreq/commit/63f9e3944d358b4fdcf1df73329d43c5632593e4))
- Improve benchmark test coverage ([#1075](https://github.com/0x676e67/wreq/issues/1075)) - ([ef41eb3](https://github.com/0x676e67/wreq/commit/ef41eb3fc14df26f6e51a979a978c3c8eeb73101))
- Simplify grouped benchmarks - ([c63ef51](https://github.com/0x676e67/wreq/commit/c63ef51583a463b44c9efce95e80719c5b803070))
- Include TLS-encrypted scenarios for HTTP/1 and HTTP/2 - ([10dc7fd](https://github.com/0x676e67/wreq/commit/10dc7fddccf1afc1a30f978b6f976d1cf19007ad))
- Add benchmarks for full and streaming bodies ([#1069](https://github.com/0x676e67/wreq/issues/1069)) - ([0186719](https://github.com/0x676e67/wreq/commit/01867191c4b78cb179980751508e6d1d4ebd685f))
- Add benchmarks for HTTP/1.1 and HTTP/2 ([#1065](https://github.com/0x676e67/wreq/issues/1065)) - ([71fb97a](https://github.com/0x676e67/wreq/commit/71fb97a6a19065e6655875ee3811deaa9c3ae429))

### Build

- *(deps)* Bump btls from 0.5.3 to 0.5.4 ([#1090](https://github.com/0x676e67/wreq/issues/1090)) - ([7c901db](https://github.com/0x676e67/wreq/commit/7c901db6ea4cce23500af66059851fd81e9c1d54))
- *(deps)* Replace `ahash` with `foldhash` in `lru` cache ([#1084](https://github.com/0x676e67/wreq/issues/1084)) - ([5c7b411](https://github.com/0x676e67/wreq/commit/5c7b4110a4b6678276218b7d6e43b6762b957ebe))
- *(deps)* Migrate from `boring2` to `btls` ([#1083](https://github.com/0x676e67/wreq/issues/1083)) - ([2d45542](https://github.com/0x676e67/wreq/commit/2d45542b230397875bd92fbca65389b24e17ca2f))
- *(deps)* Replace `raw-cpuid` with `sysinfo` implementation ([#1077](https://github.com/0x676e67/wreq/issues/1077)) - ([1ab8770](https://github.com/0x676e67/wreq/commit/1ab87707bb7939d79bd31d9460a79bece97dce8c))
- *(deps)* Bump nttld/setup-ndk from 1.5.0 to 1.6.0 ([#1072](https://github.com/0x676e67/wreq/issues/1072)) - ([3757645](https://github.com/0x676e67/wreq/commit/3757645801a260bb0db38cdbd12f26a2cc45ea5c))
- *(deps)* Replace `schnellru` with `lru`  implementation ([#1066](https://github.com/0x676e67/wreq/issues/1066)) - ([13c9586](https://github.com/0x676e67/wreq/commit/13c9586c0951c881312cdb6036a188a20eb5746c))

## New Contributors ❤️

* @sqdshguy made their first contribution in [#1094](https://github.com/0x676e67/wreq/pull/1094)

## [6.0.0-rc.28](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.27..v6.0.0-rc.28) - 2026-02-11

### Bug Fixes

- *(http1)* Use case-insensitive matching for trailer fields ([#1059](https://github.com/0x676e67/wreq/issues/1059)) - ([1b7d57b](https://github.com/0x676e67/wreq/commit/1b7d57bce1fcc7e471ba383a5b0c14fcc926d1de))

### Performance

- *(request)* Reduce overhead by lazy-loading headers for `json`/`form` data ([#1058](https://github.com/0x676e67/wreq/issues/1058)) - ([6992b6f](https://github.com/0x676e67/wreq/commit/6992b6ffd69bf61f710d97d97b436d630e38cbe7))


## [6.0.0-rc.27](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.26..v6.0.0-rc.27) - 2026-01-17

### Features

- *(cookie)* Consolidate cookie methods into a unified add() ([#1043](https://github.com/0x676e67/wreq/issues/1043)) - ([59999e6](https://github.com/0x676e67/wreq/commit/59999e613305e8aa8e13150cec858525b9f4cb6f))
- *(tls)* Add peer certificate chain to `TlsInfo` ([#1049](https://github.com/0x676e67/wreq/issues/1049)) - ([f27cb78](https://github.com/0x676e67/wreq/commit/f27cb789c8db32ca4fd0bc4e6d8e007307639ba6))

### Bug Fixes

- *(verbose)* Correct connection verbose tracing ([#1055](https://github.com/0x676e67/wreq/issues/1055)) - ([22516ae](https://github.com/0x676e67/wreq/commit/22516ae9f1a4becf3827e1ba9889a6add59e38b6))

### Refactor

- *(redirect)* Expose `Attempt` fields as public API ([#1046](https://github.com/0x676e67/wreq/issues/1046)) - ([b97fa4f](https://github.com/0x676e67/wreq/commit/b97fa4fac5530fb455777db986f2f31f8719a6ad))

### Performance

- *(redirect)* Use static `HeaderName` for `cookie2` to avoid allocation ([#1047](https://github.com/0x676e67/wreq/issues/1047)) - ([0211cad](https://github.com/0x676e67/wreq/commit/0211cad5595220095179c0045aff1c3a76690a1e))
- *(tls)* Use `Bytes` for `peer_certificate` to enable cheap cloning ([#1050](https://github.com/0x676e67/wreq/issues/1050)) - ([27c8e74](https://github.com/0x676e67/wreq/commit/27c8e74936e6eff30761954f3e9f4133b08f611b))

### Styling

- *(cookie)* Prefer `dt <= SystemTime::now()` in expires check ([#1045](https://github.com/0x676e67/wreq/issues/1045)) - ([5da3114](https://github.com/0x676e67/wreq/commit/5da3114e749b6a7a0aeb0f8cdd72759bc1a216d5))
- *(cookie)* Prefer `Duration::is_zero()` in Max-Age=0 check ([#1044](https://github.com/0x676e67/wreq/issues/1044)) - ([1e607dd](https://github.com/0x676e67/wreq/commit/1e607dd0b0d9822dfc9873d7a2e0093defc6b445))

### Miscellaneous Tasks

- *(test)* Fix windows tests ([#1042](https://github.com/0x676e67/wreq/issues/1042)) - ([a22ca01](https://github.com/0x676e67/wreq/commit/a22ca01315ab62659a1498f3d157fb767cdeb828))

### Build

- *(deps)* Add `prefix-symbols` to resolve `OpenSSL` symbol conflicts ([#1056](https://github.com/0x676e67/wreq/issues/1056)) - ([9c40d0f](https://github.com/0x676e67/wreq/commit/9c40d0ff294ae6d15477284c205607147361c90a))
- *(deps)* Bump `url` dependency version to 2.5.8 ([#1053](https://github.com/0x676e67/wreq/issues/1053)) - ([f0ba09e](https://github.com/0x676e67/wreq/commit/f0ba09e08fbd24a4736b256ef87a1f10da3c0754))
- *(deps)* Update `http2` dependency version to 0.5.11 ([#1051](https://github.com/0x676e67/wreq/issues/1051)) - ([0ccc4e8](https://github.com/0x676e67/wreq/commit/0ccc4e8e6db4885dada569ecf161bf5104d8a37f))

## New Contributors ❤️

* @Abernson made their first contribution in [#1049](https://github.com/0x676e67/wreq/pull/1049)

## [6.0.0-rc.26](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.25..v6.0.0-rc.26) - 2025-12-31

### Features

- Add `query` and `form` crate features ([#1035](https://github.com/0x676e67/wreq/issues/1035)) - ([091b9e9](https://github.com/0x676e67/wreq/commit/091b9e9e93fef8bc838910dc383a3fb6bdcb8778))

### Bug Fixes

- *(proxy)* Skip proxy headers for HTTPS destinations ([#1039](https://github.com/0x676e67/wreq/issues/1039)) - ([972737f](https://github.com/0x676e67/wreq/commit/972737f540150819d9659cb17e8cdc097dbb078f))
- *(redirect)* Fix redirect `location` encoding ([#1034](https://github.com/0x676e67/wreq/issues/1034)) - ([f8e2114](https://github.com/0x676e67/wreq/commit/f8e21143abe06f7ae65d26d3ffb979433fcfe394))

### Refactor

- *(header)* Hide internal details of `OrigHeaderName` ([#1036](https://github.com/0x676e67/wreq/issues/1036)) - ([5424935](https://github.com/0x676e67/wreq/commit/5424935235270cead6c5f2e9a7f59a5398ad001c))

### Performance

- *(proxy)* Improve proxy credential handling for concurrent requests ([#1041](https://github.com/0x676e67/wreq/issues/1041)) - ([4016d1b](https://github.com/0x676e67/wreq/commit/4016d1bfeb7b24122ecdc0906129e65841c3700c))
- *(uri)* Improve `String` to `Uri` conversion performance ([#1038](https://github.com/0x676e67/wreq/issues/1038)) - ([fcd5cc5](https://github.com/0x676e67/wreq/commit/fcd5cc54a7d3d0d0c2d3575af6f8c6ea1f0fdabe))

### Miscellaneous Tasks

- *(redirect)* Remove macros - ([c92fbaf](https://github.com/0x676e67/wreq/commit/c92fbaf87d33c11d681c7d47c09a54d47b2674fb))

## New Contributors ❤️

* @blinjrm made their first contribution in [#1039](https://github.com/0x676e67/wreq/pull/1039)

## [6.0.0-rc.25](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.23..v6.0.0-rc.25) - 2025-12-23

### Features

- *(cookie)* Refactor `CookieStore` cookie compression strategy ([#1005](https://github.com/0x676e67/wreq/issues/1005)) - ([2dc14cd](https://github.com/0x676e67/wreq/commit/2dc14cd9207d0c1cb41583395a7f544acb40aadf))
- *(error)* Add `is_proxy_connect` for proxy connection errors ([#1014](https://github.com/0x676e67/wreq/issues/1014)) - ([0578465](https://github.com/0x676e67/wreq/commit/0578465eb64a23b2d47fb7080ea372646c4783d6))
- *(proxy)* Compatibility for sending HTTP requests without HTTPS tunneling ([#991](https://github.com/0x676e67/wreq/issues/991)) - ([bd1d58b](https://github.com/0x676e67/wreq/commit/bd1d58bcf3b87924486b9515f6f678dc8ca36800))
- *(redirect)* Add async support to redirect policy ([#996](https://github.com/0x676e67/wreq/issues/996)) - ([bc6f113](https://github.com/0x676e67/wreq/commit/bc6f11376d884dcd614889861bb55157907cdab7))
- *(response)* Introduce trailers support ([#1021](https://github.com/0x676e67/wreq/issues/1021)) - ([28bcc63](https://github.com/0x676e67/wreq/commit/28bcc63cb0e9083c944d55ca3895ee70a1ed636b))

### Bug Fixes

- *(proxy)* Improve domain matching case insensitivity ([#1031](https://github.com/0x676e67/wreq/issues/1031)) - ([87f9019](https://github.com/0x676e67/wreq/commit/87f90191bbb5fe39174ab2777b4d526145f2e75c))
- *(proxy)* Fix HTTP requests proxied through an `SOCKS5`/`HTTPS tunnel` ([#990](https://github.com/0x676e67/wreq/issues/990)) - ([7207dd5](https://github.com/0x676e67/wreq/commit/7207dd55989f9ef2d3577261928252b5dc90f206))
- *(redirect)* Ensure redirect URLs are properly encoded ([#1017](https://github.com/0x676e67/wreq/issues/1017)) - ([8ad5023](https://github.com/0x676e67/wreq/commit/8ad5023932b480c1cf94d8bbddc9bb2b59a83d6c))
- *(request)* Fix missing `http::Request` conversion extensions ([#1000](https://github.com/0x676e67/wreq/issues/1000)) - ([9df5f14](https://github.com/0x676e67/wreq/commit/9df5f14f3657692ae19691105826d30c23056996))
- *(test)* Fix decompression test ([#998](https://github.com/0x676e67/wreq/issues/998)) - ([54f5ee6](https://github.com/0x676e67/wreq/commit/54f5ee63877e5ec3ef04167dcdb25b1025a0b2f7))

### Refactor

- *(config)* Simplify extension config type wrappers ([#1009](https://github.com/0x676e67/wreq/issues/1009)) - ([adf84e3](https://github.com/0x676e67/wreq/commit/adf84e38abaa921f10a3994920bbe494bafc608a))
- *(core)* Use flat module style - ([30a8c13](https://github.com/0x676e67/wreq/commit/30a8c135c26bc4853c24f3a5209b6ad098a4f74a))
- *(decoder)* Reorder decoder tower layers ([#1026](https://github.com/0x676e67/wreq/issues/1026)) - ([910378d](https://github.com/0x676e67/wreq/commit/910378d9965cd11a9d0c9bf0478428d1f200802d))
- *(ext)* Remove extension wrapper types ([#999](https://github.com/0x676e67/wreq/issues/999)) - ([15b4866](https://github.com/0x676e67/wreq/commit/15b48664364a436d863b5f94881d6e36402b7f10))
- *(mod)* Use flat module style and merge legacy client ([#993](https://github.com/0x676e67/wreq/issues/993)) - ([75db3ea](https://github.com/0x676e67/wreq/commit/75db3eaa3b63d52580cef711cd2b3a5960d3850d))
- *(proxy)* Use flat module style - ([0925369](https://github.com/0x676e67/wreq/commit/0925369c903046ae745bba8eb7330ae2086fa4b7))
- *(redirect)* Refactor handling of redirect history ([#1002](https://github.com/0x676e67/wreq/issues/1002)) - ([b1ce184](https://github.com/0x676e67/wreq/commit/b1ce184b901aa5f1d11eb1af4dd6b02dffedfed6))

### Documentation

- *(proxy)* Fix docs prompt ([#1010](https://github.com/0x676e67/wreq/issues/1010)) - ([989e691](https://github.com/0x676e67/wreq/commit/989e6910014124cc579eabd372a34ea665d37c63))
- Update documentation for `Request` and `RequestBuilder` - ([e30b393](https://github.com/0x676e67/wreq/commit/e30b3932323f23e902ae97d0178d1409ff2ef290))
- Fix documentation build warning ([#1008](https://github.com/0x676e67/wreq/issues/1008)) - ([303c54e](https://github.com/0x676e67/wreq/commit/303c54eba89e4cd2252da3a986710ad330034da8))

### Performance

- *(client)* Reduce one `HeaderMap` clone during header merge ([#987](https://github.com/0x676e67/wreq/issues/987)) - ([ce030b8](https://github.com/0x676e67/wreq/commit/ce030b8c3ba6bb233775fad271e1ecff49a95a61))
- *(ext)* Update query handling to avoid copying ([#1007](https://github.com/0x676e67/wreq/issues/1007)) - ([be0366f](https://github.com/0x676e67/wreq/commit/be0366fb656cdffde5504c0354ebff36a65a34b2))
- *(proxy)* Reduce branch matching ([#992](https://github.com/0x676e67/wreq/issues/992)) - ([ed00aec](https://github.com/0x676e67/wreq/commit/ed00aec00371097810d634901bd648dc990041f5))
- *(redirect)* Avoid cloning inner service for non-redirect requests ([#1028](https://github.com/0x676e67/wreq/issues/1028)) - ([7933341](https://github.com/0x676e67/wreq/commit/79333414a4c6a83e35356ab68ea301b0976472f4))

### Styling

- *(connector)* Fmt code - ([8a15bf4](https://github.com/0x676e67/wreq/commit/8a15bf418c902ada7975976d5278d20487535831))
- *(layer)* Use flat module style ([#1027](https://github.com/0x676e67/wreq/issues/1027)) - ([519e4ca](https://github.com/0x676e67/wreq/commit/519e4ca6c3ceba8e355838fb2ba0a359ddb3feff))
- Fmt code - ([53df061](https://github.com/0x676e67/wreq/commit/53df061e44f049c38de1d63b1ef2077070eea7fe))
- Fmt code - ([c15fc08](https://github.com/0x676e67/wreq/commit/c15fc08abc9210bcd98460e112e3fc746b39e748))

### Testing

- *(response)* Remove duplicate tests - ([7c1df27](https://github.com/0x676e67/wreq/commit/7c1df27efecb5f0a5abdaeec33d5f2bf9a885610))

### Miscellaneous Tasks

- *(body)* Remove `Debug` trait implementation for Body - ([72aea5e](https://github.com/0x676e67/wreq/commit/72aea5eb8e48fc2c561b0b4718f8a4654d0d31cf))
- *(body)* Remove unnecessary `cfg_attr` for stream feature - ([9c698b3](https://github.com/0x676e67/wreq/commit/9c698b38088529c9d79c293f41b3697a784b5b7a))
- *(body)* Simplify body construction ([#1020](https://github.com/0x676e67/wreq/issues/1020)) - ([7116f11](https://github.com/0x676e67/wreq/commit/7116f11e0e80ad9651b6f19ced93c2ac8a4d3731))
- *(decoder)* Add debug assertion for decoder presence - ([977a7ba](https://github.com/0x676e67/wreq/commit/977a7ba80ff4080a19460f8c74908eac509084e6))
- *(layer)* Move body timeout layer to the outermost layer ([#1032](https://github.com/0x676e67/wreq/issues/1032)) - ([294e9d8](https://github.com/0x676e67/wreq/commit/294e9d8b4b257eb69ad23e7f1b0508ff5c6a8442))
- *(multipart)* Remove custom `Debug` trait implementations - ([4512913](https://github.com/0x676e67/wreq/commit/45129134b0c67dafb26fc2038f8fd9a4dc92b4ca))
- *(req/resp)* Fmt docs ([#1022](https://github.com/0x676e67/wreq/issues/1022)) - ([d395827](https://github.com/0x676e67/wreq/commit/d39582730c9d92cdb76e133648a4582511bac647))
- *(request)* Simplify request construction ([#1018](https://github.com/0x676e67/wreq/issues/1018)) - ([2b044fb](https://github.com/0x676e67/wreq/commit/2b044fbb8b748418b3dfd551c8b9b3ba629b5529))
- *(request)* Fmt code - ([32fa617](https://github.com/0x676e67/wreq/commit/32fa61771646a1c1c22cb205e94016006b87232a))
- *(response)* Remove `Debug` implementation for `Response` - ([51f86a5](https://github.com/0x676e67/wreq/commit/51f86a56bb35ca317a108796430e97cfe386bb0f))
- *(response)* Simplify response construction ([#1016](https://github.com/0x676e67/wreq/issues/1016)) - ([08a8066](https://github.com/0x676e67/wreq/commit/08a8066d690a2b902017a5ed9598c4e6972ca57c))
- *(style)* Fmt code - ([9f1fd12](https://github.com/0x676e67/wreq/commit/9f1fd12f4af694be89ca2c4e0a8f054ab4e6a310))
- Add MSRV job to CI workflow - ([681a763](https://github.com/0x676e67/wreq/commit/681a763eeac5bd75f29868d5907f72d0d8033e8e))
- Use `http_body_util::BodyDataStream` ([#1015](https://github.com/0x676e67/wreq/issues/1015)) - ([75baf44](https://github.com/0x676e67/wreq/commit/75baf44b84bccb3236e8d1b13249d61e344a4b44))
- Remove cmake pinning from Windows CI step - ([87fc1f6](https://github.com/0x676e67/wreq/commit/87fc1f69989101ac412e4e8e585a4d2a5dfb1073))
- Add Android NDK tests ([#1011](https://github.com/0x676e67/wreq/issues/1011)) - ([adab15a](https://github.com/0x676e67/wreq/commit/adab15ac1c02411470f914311e299fc84ee3772f))

### Revert

- *(request)* Restore upstream header insertion strategy ([#995](https://github.com/0x676e67/wreq/issues/995)) - ([00c1d6d](https://github.com/0x676e67/wreq/commit/00c1d6d98d760512885270fa5211769ce311fc2a))

### Build

- *(deps)* Update `system-configuration` version to 0.7.0 ([#1024](https://github.com/0x676e67/wreq/issues/1024)) - ([040fc99](https://github.com/0x676e67/wreq/commit/040fc9942ab677a56d9432910db181ec181904f6))
- *(deps)* Bump actions/checkout from 5 to 6 ([#1023](https://github.com/0x676e67/wreq/issues/1023)) - ([814b9c8](https://github.com/0x676e67/wreq/commit/814b9c880727def1f6cf1586526971d91a473a4f))
- Cargo diet - ([f0d1ea1](https://github.com/0x676e67/wreq/commit/f0d1ea18226b46185106e9d096acd542ee39a454))


## [6.0.0-rc.23](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.22..v6.0.0-rc.23) - 2025-11-28

### Bug Fixes

- *(client)* Handle multi-value default headers without overriding requests ([#986](https://github.com/0x676e67/wreq/issues/986)) - ([745fa26](https://github.com/0x676e67/wreq/commit/745fa265a99a857c394226f4d2b64f7783813d17))
- *(test)* Fix decompression empty body test ([#979](https://github.com/0x676e67/wreq/issues/979)) - ([9e11af1](https://github.com/0x676e67/wreq/commit/9e11af143fc452e65a42cd720138b96c7433ffd4))

### Refactor

- *(http1)* Replace many args of `Chunked::step` with struct - ([6ffef6c](https://github.com/0x676e67/wreq/commit/6ffef6ca138f341340aa4f2086fdbca009ca301e))
- Change fast_random from xorshift to siphash a counter ([#983](https://github.com/0x676e67/wreq/issues/983)) - ([a386091](https://github.com/0x676e67/wreq/commit/a38609107949bc88e2dd38a0978bde91f8684b38))

### Build

- *(deps)* Bump actions/checkout from 5 to 6 ([#978](https://github.com/0x676e67/wreq/issues/978)) - ([81d8d82](https://github.com/0x676e67/wreq/commit/81d8d82f811d60a71f6a5e0eff712134dfd15f80))

### Deps

- Update tokio-tungstenite version to 0.28.0 ([#982](https://github.com/0x676e67/wreq/issues/982)) - ([cf8a71e](https://github.com/0x676e67/wreq/commit/cf8a71ea6957ccd40beda136678954787fcab9db))


## [6.0.0-rc.22](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.21..v6.0.0-rc.22) - 2025-11-21

### Features

- *(rt)* Add Timer::now() method to allow overriding the instant returned ([#976](https://github.com/0x676e67/wreq/issues/976)) - ([7cf3b95](https://github.com/0x676e67/wreq/commit/7cf3b95f8f445aff46ddd6455e0afaadb72bba36))

### Bug Fixes

- *(http1)* Fix rare missed write wakeup on connections ([#974](https://github.com/0x676e67/wreq/issues/974)) - ([d6bccef](https://github.com/0x676e67/wreq/commit/d6bccefe0e7d474e9bb1a375a3707326fa5db9a4))
- *(proxy)* Fix 407 proxy auth failures for HTTP requests ([#975](https://github.com/0x676e67/wreq/issues/975)) - ([df67842](https://github.com/0x676e67/wreq/commit/df6784232b9f3b146c872ecb8606336ad2a06256))

### Performance

- *(uri)* Avoid double copying during URI percent encoding ([#977](https://github.com/0x676e67/wreq/issues/977)) - ([6a1a406](https://github.com/0x676e67/wreq/commit/6a1a406d6f12eb3baf320a435330256b71bf8cf3))

### Miscellaneous Tasks

- *(client)* Refactor proxy auth handling logic - ([e54df35](https://github.com/0x676e67/wreq/commit/e54df351be60c6957759f82c3ca6861aca31db33))


## [6.0.0-rc.21](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.20..v6.0.0-rc.21) - 2025-11-07

### Features

- *(uri)* Percent-encode spaces when building request URLs ([#972](https://github.com/0x676e67/wreq/issues/972)) - ([de1c937](https://github.com/0x676e67/wreq/commit/de1c9379c101764e1dc5f32d300154edec7f89f6))

### Bug Fixes

- *(proxy)* Support proxy auth where password is omitted ([#971](https://github.com/0x676e67/wreq/issues/971)) - ([f7ffd56](https://github.com/0x676e67/wreq/commit/f7ffd565b8129007b2ee8ccd756f0ccf248decef))

### Refactor

- *(dns)* Redesign DNS API for improved ergonomics and functionality ([#968](https://github.com/0x676e67/wreq/issues/968)) - ([9c3c3f5](https://github.com/0x676e67/wreq/commit/9c3c3f50fe4249be3a1a878d5ad24506bf7778f1))
- *(proxy)* Consolidate platform-specific modules into mod.rs ([#956](https://github.com/0x676e67/wreq/issues/956)) - ([99d3ed7](https://github.com/0x676e67/wreq/commit/99d3ed74ce0c520baba77301a3a6da20701b550c))

### Documentation

- *(retry)* Fix typo ([#957](https://github.com/0x676e67/wreq/issues/957)) - ([ed5fef2](https://github.com/0x676e67/wreq/commit/ed5fef2a18f473b770799abfa64c092529ebf74d))

### Performance

- *(connector)* Disable Nagle's algorithm for TLS handshake ([#955](https://github.com/0x676e67/wreq/issues/955)) - ([35f4265](https://github.com/0x676e67/wreq/commit/35f426502dada4e4fb245048feccd3b6762f0ea0))

### Testing

- *(redirect)* Improve redirect cookie tests ([#963](https://github.com/0x676e67/wreq/issues/963)) - ([852f280](https://github.com/0x676e67/wreq/commit/852f28059719f3e485e58e9b92f2591466d0f342))

### Miscellaneous Tasks

- *(connector)* Fmt code - ([00fa021](https://github.com/0x676e67/wreq/commit/00fa021349eec058456e2e51ed6b01ab72eedecf))
- *(dcos)* Improve API docs ([#954](https://github.com/0x676e67/wreq/issues/954)) - ([10eabd7](https://github.com/0x676e67/wreq/commit/10eabd775aacce16a8e0a616c5919124bb5456ef))
- Update docs - ([9c08747](https://github.com/0x676e67/wreq/commit/9c0874711a10b5d68ee6710218dac4ee3a07d982))
- Fix style check ([#959](https://github.com/0x676e67/wreq/issues/959)) - ([6c3c02b](https://github.com/0x676e67/wreq/commit/6c3c02bab811893de65b599a8fc75fd50dadd103))

### Build

- *(deps)* Update windows-registry requirement from 0.5.0 to 0.6.0 ([#962](https://github.com/0x676e67/wreq/issues/962)) - ([b51a8fb](https://github.com/0x676e67/wreq/commit/b51a8fbfb5b9f6e3c235ce389926021236e57386))


## [6.0.0-rc.20](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.16..v6.0.0-rc.20) - 2025-09-19

### Refactor

- *(tls)* Replace `prefer_chacha20` with `preserve_tls13_cipher_list` ([#953](https://github.com/0x676e67/wreq/issues/953)) - ([3d4f61d](https://github.com/0x676e67/wreq/commit/3d4f61d1135c066df07073899c1cfe81c1fcf961))


## [6.0.0-rc.16](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.15..v6.0.0-rc.16) - 2025-09-17

### Features

- *(ws)* Implement `FusedStream` trait for WebSocket ([#949](https://github.com/0x676e67/wreq/issues/949)) - ([d292ef7](https://github.com/0x676e67/wreq/commit/d292ef799a4dfac4500f5ccd785e3fdebeecbe7c))

### Bug Fixes

- *(client)* Allow absolute-form if is_proxied is set even on HTTPS ([#945](https://github.com/0x676e67/wreq/issues/945)) - ([0df02e1](https://github.com/0x676e67/wreq/commit/0df02e1c8db43cd94e32541ce0e24b3966441804))
- *(error)* Drop leftover debug logging ([#948](https://github.com/0x676e67/wreq/issues/948)) - ([3f73ae6](https://github.com/0x676e67/wreq/commit/3f73ae688bd7acd8a7292eb2a5a6ab7b9892de3b))
- *(http2)* Fix chained calls ([#952](https://github.com/0x676e67/wreq/issues/952)) - ([a1765dc](https://github.com/0x676e67/wreq/commit/a1765dce6403ea037769331bf51e520f13b7f024))

### Refactor

- *(ws)* Improve close method API ergonomics ([#947](https://github.com/0x676e67/wreq/issues/947)) - ([de9e36b](https://github.com/0x676e67/wreq/commit/de9e36b98e1d372d658c55eeb2cc324d67177b06))

### Miscellaneous Tasks

- *(client)* Fmt code - ([ccc54f7](https://github.com/0x676e67/wreq/commit/ccc54f7cb0805749fac896d3e388383916cf1200))
- *(examples)* Remove tracing logs from examples - ([dae70b4](https://github.com/0x676e67/wreq/commit/dae70b4320372c00387a2090ba34099ca1e22246))
- *(examples)* Change HTTP client to use wreq with proxy - ([ba92b95](https://github.com/0x676e67/wreq/commit/ba92b95a913811f7979ff8e51239390c2c62f3d4))


## [6.0.0-rc.15](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.14..v6.0.0-rc.15) - 2025-09-12

### Features

- *(http1)* Remove `preserve_header_case` support ([#943](https://github.com/0x676e67/wreq/issues/943)) - ([fd59127](https://github.com/0x676e67/wreq/commit/fd59127a8afebc42adf4e7eb40faaf792377e62b))
- *(retry)* Introduce configurable retry policy ([#935](https://github.com/0x676e67/wreq/issues/935)) - ([f4644d8](https://github.com/0x676e67/wreq/commit/f4644d8a08545de19638abd80484210190f123f2))

### Refactor

- *(ext)* Introduce ergonomic and functional API ([#942](https://github.com/0x676e67/wreq/issues/942)) - ([52709b3](https://github.com/0x676e67/wreq/commit/52709b3dc3b3c7a756bb370c8efc31dba86f2fc9))
- *(keylog)* Redesign API for better ergonomics and functionality ([#941](https://github.com/0x676e67/wreq/issues/941)) - ([7845b9b](https://github.com/0x676e67/wreq/commit/7845b9b9d6c3c31cda3c52f573a1446e710710d7))

### Testing

- *(client)* Update header tests and examples ([#939](https://github.com/0x676e67/wreq/issues/939)) - ([bfb8739](https://github.com/0x676e67/wreq/commit/bfb8739b0c0a03e06e54d9c68f7783ca1415b0a3))

### Miscellaneous Tasks

- *(internal)* Remove unnecessary `Debug` bounds - ([4aa1088](https://github.com/0x676e67/wreq/commit/4aa1088888ba8fe4e64a2ff7cf874b1d0174b154))
- *(response)* Drop `Uri::try_from` in From<http::Response<T>> - ([9e16fba](https://github.com/0x676e67/wreq/commit/9e16fba5e1be1bf95b9b06ad16e0a9858c0b60c2))
- *(retry)* Remove unused code - ([147fe60](https://github.com/0x676e67/wreq/commit/147fe60d5c62048b064e7896d90e96011383ffa9))
- *(sync)* Remove unused code ([#940](https://github.com/0x676e67/wreq/issues/940)) - ([a17f799](https://github.com/0x676e67/wreq/commit/a17f79957e722589b6e122f54fae2f1a82893c5b))


## [6.0.0-rc.14](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.13..v6.0.0-rc.14) - 2025-09-05

### Bug Fixes

- *(client)* Ensure `Accept-Encoding` header is applied correctly ([#928](https://github.com/0x676e67/wreq/issues/928)) - ([f9f9331](https://github.com/0x676e67/wreq/commit/f9f9331ca28f07fd1d5ad4067d297c66dfe013c1))

### Refactor

- *(client)* Enforce `ClientBuilder` initialization via `Client::builder()` ([#932](https://github.com/0x676e67/wreq/issues/932)) - ([513e6f5](https://github.com/0x676e67/wreq/commit/513e6f56169ba357c8d830d77745092d1a90750c))
- *(response)* Accept AsRef<str> for charset for better ([#934](https://github.com/0x676e67/wreq/issues/934)) - ([b95e3b5](https://github.com/0x676e67/wreq/commit/b95e3b5791b983b436c892569a1d3a678999ed26))

### Performance

- *(client)* Prevent header duplication by reordering layers ([#930](https://github.com/0x676e67/wreq/issues/930)) - ([ca72a53](https://github.com/0x676e67/wreq/commit/ca72a5341e0ca7d0afe187d1fcd63e1ce1895596))
- *(client)* Avoid redundant header copy ([#929](https://github.com/0x676e67/wreq/issues/929)) - ([c0d8df7](https://github.com/0x676e67/wreq/commit/c0d8df7c1b8d4dfb002dc6bf6ff417ba67f2d587))

### Miscellaneous Tasks

- *(client)* Speed up client initialization ([#931](https://github.com/0x676e67/wreq/issues/931)) - ([be90796](https://github.com/0x676e67/wreq/commit/be90796bda2c481c773c9c93e26420da92faa932))
- *(test)* Fmt code - ([f5ab83c](https://github.com/0x676e67/wreq/commit/f5ab83cfb4d28518dab06e63d28c6f234bfd590f))
- *(tests)* Fmt code ([#933](https://github.com/0x676e67/wreq/issues/933)) - ([86ee4e3](https://github.com/0x676e67/wreq/commit/86ee4e3343466f0284837d4bec6429f28620fc1a))


## [6.0.0-rc.13](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.12..v6.0.0-rc.13) - 2025-09-02

### Bug Fixes

- *(cookie)* Normalize host handling with port ([#926](https://github.com/0x676e67/wreq/issues/926)) - ([66368be](https://github.com/0x676e67/wreq/commit/66368be48fd8437c1f2c8cd3ef9e7f0f8432a245))

### Styling

- *(redirect)* Fmt code - ([db195ef](https://github.com/0x676e67/wreq/commit/db195efaedd4232cf27c4161414de64c4898b1fe))


## [6.0.0-rc.12](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.11..v6.0.0-rc.12) - 2025-09-02

### Features

- *(lib)* Introduce request shortcut ([#924](https://github.com/0x676e67/wreq/issues/924)) - ([ad6b79d](https://github.com/0x676e67/wreq/commit/ad6b79d0042df52e0e1c418a66a66760308837ac))


## [6.0.0-rc.11](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.9..v6.0.0-rc.11) - 2025-08-31

### Features

- *(tls)* Allow custom ALPN configuration ([#921](https://github.com/0x676e67/wreq/issues/921)) - ([9edfd54](https://github.com/0x676e67/wreq/commit/9edfd54732bae3fd98510d307c4320f48bf44a6d))

### Bug Fixes

- *(cookie)* Fix cookie deletion and lookup logic ([#923](https://github.com/0x676e67/wreq/issues/923)) - ([e6014ef](https://github.com/0x676e67/wreq/commit/e6014ef049826062e305e475e10e4c142980a3d5))

### Documentation

- *(tls)* Refine `TlsOptions` field documentation ([#922](https://github.com/0x676e67/wreq/issues/922)) - ([2b42c9c](https://github.com/0x676e67/wreq/commit/2b42c9c3b43b3aabaed6d1c66b0f0bc21070cd48))
- *(tls)* Update module docs ([#920](https://github.com/0x676e67/wreq/issues/920)) - ([04c1258](https://github.com/0x676e67/wreq/commit/04c12583c67f0205e5dfd049db19316acbc32cce))

### Miscellaneous Tasks

- *(tls)* Streamline conn module type re-exports - ([362c12a](https://github.com/0x676e67/wreq/commit/362c12a50956eb3955a5a6735ebd0bfac39b1e8b))
- *(tls)* Remove ext & cert compression wrappers ([#918](https://github.com/0x676e67/wreq/issues/918)) - ([d9c3e84](https://github.com/0x676e67/wreq/commit/d9c3e8420075f8f6feca0f1725728f0cc25603aa))


## [6.0.0-rc.9](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.8..v6.0.0-rc.9) - 2025-08-30

### Features

- *(cookie)* Improve `cookie_provider` for better ergonomics and flexibility ([#895](https://github.com/0x676e67/wreq/issues/895)) - ([70dd6d9](https://github.com/0x676e67/wreq/commit/70dd6d9d13181b252ce8b69ba807fd5b7b9a15a4))
- *(dns)* Export `IntoResolve` as public API ([#913](https://github.com/0x676e67/wreq/issues/913)) - ([b1b6278](https://github.com/0x676e67/wreq/commit/b1b6278830e20496e965cdbb9adca7d03974f928))
- *(lib)* Add shortcut request methods ([#903](https://github.com/0x676e67/wreq/issues/903)) - ([03cce5e](https://github.com/0x676e67/wreq/commit/03cce5e87dfc9fc77d7ce8eb10bcb60069a3114e))
- *(proxy)* Add Unix socket proxy support ([#900](https://github.com/0x676e67/wreq/issues/900)) - ([d60a6f3](https://github.com/0x676e67/wreq/commit/d60a6f30b0d299f2f1e44f79ec5f9b6cdf94bddf))
- *(redirect)* Support accessing redirect history in response  ([#917](https://github.com/0x676e67/wreq/issues/917)) - ([46278eb](https://github.com/0x676e67/wreq/commit/46278eb6a38b48a75803cf7b49161690d0b90161))
- *(redirect)* Allow custom redirects to access response headers ([#916](https://github.com/0x676e67/wreq/issues/916)) - ([7a1c86a](https://github.com/0x676e67/wreq/commit/7a1c86abab7d835a5da92b2573d7e5ef71ff6980))
- *(response)* Preserve URL when converting `Response` to `http::Response` ([#897](https://github.com/0x676e67/wreq/issues/897)) - ([72b24c7](https://github.com/0x676e67/wreq/commit/72b24c7284d21af2bfbfcc0bcdbac9bc20a5feac))
- *(ws)* Remove Utf8Bytes::from_bytes_unchecked, unsafe UTF-8 ([#912](https://github.com/0x676e67/wreq/issues/912)) - ([e6b8bcf](https://github.com/0x676e67/wreq/commit/e6b8bcfd33ec6a70cf705da1665ca6d15cae520e))

### Refactor

- *(connect)* Safely convert `socket2::Socket` to Tokio `TcpSocket` ([#904](https://github.com/0x676e67/wreq/issues/904)) - ([2461be9](https://github.com/0x676e67/wreq/commit/2461be98fc73e2fd78c396a69c70ce9ab4f7bbf0))
- *(core)* Replace Tokio I/O abstraction ([#909](https://github.com/0x676e67/wreq/issues/909)) - ([16976b9](https://github.com/0x676e67/wreq/commit/16976b935f01a6464d4c0ae1e3611e45429b351b))
- *(deps)* Remove dependency on `url::Url` ([#914](https://github.com/0x676e67/wreq/issues/914)) - ([356950d](https://github.com/0x676e67/wreq/commit/356950d2cfbcb9f4f4ff5832ca696a95880171f2))
- *(h2)* Refactor legacy unsafe wrapper code ([#905](https://github.com/0x676e67/wreq/issues/905)) - ([172f1c5](https://github.com/0x676e67/wreq/commit/172f1c558292b4630875b0e3910ee2cb4337f071))
- *(io)* Use Pin::as_deref_mut() from std instead of custom polyfill ([#906](https://github.com/0x676e67/wreq/issues/906)) - ([d3d80f1](https://github.com/0x676e67/wreq/commit/d3d80f16e23e8e1594f2c45041b9403ea2b6be03))

### Documentation

- *(identity)* Update documentation - ([459afd6](https://github.com/0x676e67/wreq/commit/459afd6a90c4da254dd6598f604c3b1fd1841cec))
- *(proxy)* Remove type export section - ([ae81ef5](https://github.com/0x676e67/wreq/commit/ae81ef533e2439d0398a22b6740521fddcb6cc0d))
- *(request)* Update docs on request methods with cfg support - ([654e225](https://github.com/0x676e67/wreq/commit/654e2258d8472c3427af09b13c19f70949f38ca9))

### Performance

- *(http1)* Write during header sorting ([#899](https://github.com/0x676e67/wreq/issues/899)) - ([f025e3f](https://github.com/0x676e67/wreq/commit/f025e3fcfce4d8a8d31726b46e92ad8f51dcf46f))
- *(http2)* Significantly improve http2 multi-core performance ([#892](https://github.com/0x676e67/wreq/issues/892)) - ([2c3f873](https://github.com/0x676e67/wreq/commit/2c3f8736b21589ab4f9f2dec1f56c0a9de321dd0))
- *(layer)* Inline layer creation for faster client build - ([78e8fc7](https://github.com/0x676e67/wreq/commit/78e8fc7b203ac382a5fb70183564513c7346cbe1))

### Styling

- *(cookie)* Fmt code - ([315bccf](https://github.com/0x676e67/wreq/commit/315bccfc65101642b2a56f583c573b6d11148bb7))
- *(header)* Simplify header sorting branch match - ([ee23d25](https://github.com/0x676e67/wreq/commit/ee23d25fd258f51eb33b20d72460913c38e7a517))
- *(proto)* Fmt code - ([02e0bc0](https://github.com/0x676e67/wreq/commit/02e0bc06876a458536268863938a4906354791b9))
- *(request)* Fmt code - ([d6e56e4](https://github.com/0x676e67/wreq/commit/d6e56e4b9e85ab73d627d72a51ed04198483cf98))

### Miscellaneous Tasks

- *(ci)* Speed up tests with feature matrix in GitHub Actions ([#894](https://github.com/0x676e67/wreq/issues/894)) - ([d66dc66](https://github.com/0x676e67/wreq/commit/d66dc6671fadbd427ea2c1d0e4fa07e61d62b4db))
- *(proxy)* Debug-print HTTP headers - ([628e6b4](https://github.com/0x676e67/wreq/commit/628e6b462561a7fd5fe987dff6e14a76b02272de))
- *(upgrade)* Drop unused code - ([bb26177](https://github.com/0x676e67/wreq/commit/bb261776fe41f1024f3af1d73147fd0440b2f908))
- Minimize package size - ([938e3f5](https://github.com/0x676e67/wreq/commit/938e3f56c113bd721ceb9216f15c2e8e141f6d50))

### Build

- *(deps)* Bump actions/checkout from 4 to 5 ([#908](https://github.com/0x676e67/wreq/issues/908)) - ([5f6723a](https://github.com/0x676e67/wreq/commit/5f6723a7a8aad0db11f27ff9aa8e5b208f5f6cb4))
- *(deps)* Minimize out-of-the-box dependencies ([#902](https://github.com/0x676e67/wreq/issues/902)) - ([5b68106](https://github.com/0x676e67/wreq/commit/5b68106bcda7ae78209afb35925704f13765717b))
- *(deps)* Bump actions/checkout from 3 to 5 ([#893](https://github.com/0x676e67/wreq/issues/893)) - ([9877ed6](https://github.com/0x676e67/wreq/commit/9877ed6c177c139719bf35245027399e39a7cae7))


## [6.0.0-rc.8](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.7..v6.0.0-rc.8) - 2025-08-12

### Features

- *(dns)* Improve `dns_resolver` for better ergonomics and flexibility ([#891](https://github.com/0x676e67/wreq/issues/891)) - ([9e3f974](https://github.com/0x676e67/wreq/commit/9e3f97450af724abba62cc1ee586c292b16e8498))

### Bug Fixes

- *(deps)* Upgrade url to v2.5.4 to address CVE-2024-12224 ([#887](https://github.com/0x676e67/wreq/issues/887)) - ([7038272](https://github.com/0x676e67/wreq/commit/70382725752d44682b5e684d7af3522614941f94))
- *(pool)* Prevent failure when registering the waker with this oneshot ([#888](https://github.com/0x676e67/wreq/issues/888)) - ([f7d914d](https://github.com/0x676e67/wreq/commit/f7d914d96712bb3f20403d1dce1c30c4d03c7586))

### Refactor

- *(client)* Remove `no_keepalive` method ([#890](https://github.com/0x676e67/wreq/issues/890)) - ([0c15943](https://github.com/0x676e67/wreq/commit/0c159431a296163eb52cf95d0ea9f1e9fc84e3c0))

### Documentation

- *(README)* Update example - ([b620408](https://github.com/0x676e67/wreq/commit/b6204085abbfba933e6bfb368f7a8579b4bea417))
- *(service)* Update service docs - ([a644502](https://github.com/0x676e67/wreq/commit/a64450253447a8a4287c89e28c66cbd5f9a8c689))

### Testing

- *(common)* Add missing assertion in full_rewind test ([#889](https://github.com/0x676e67/wreq/issues/889)) - ([c84746a](https://github.com/0x676e67/wreq/commit/c84746af284f4b0c2ec72f4d01150cb53de30ac9))

### Build

- *(deps)* Update async-tungstenite requirement from 0.30.0 to 0.31.0 ([#884](https://github.com/0x676e67/wreq/issues/884)) - ([d484f71](https://github.com/0x676e67/wreq/commit/d484f71b1ba2ad26ee9fa28b230d6c4ce5f63df8))


## [6.0.0-rc.7](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.5..v6.0.0-rc.7) - 2025-08-10

### Features

- *(ws)* Option for `default_headers` method in websocket ([#883](https://github.com/0x676e67/wreq/issues/883)) - ([fd36b7a](https://github.com/0x676e67/wreq/commit/fd36b7a817f3fb8d2b59dea73c34ff4fd3249d87))

### Bug Fixes

- *(request)* Correct `default_headers` method semantics ([#882](https://github.com/0x676e67/wreq/issues/882)) - ([2cbd0ac](https://github.com/0x676e67/wreq/commit/2cbd0ac56813a9e4b022d1747dce512943c31993))

### Refactor

- *(dns)* Make hickory module internal ([#881](https://github.com/0x676e67/wreq/issues/881)) - ([e441048](https://github.com/0x676e67/wreq/commit/e441048a6b5df1af3e715cbeceba7e178bbb22eb))

### Miscellaneous Tasks

- *(client)* Expose additional configuration options - ([65bd959](https://github.com/0x676e67/wreq/commit/65bd95963500af6205f9f06b4cc059b67a0ed740))


## [6.0.0-rc.5](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.4..v6.0.0-rc.5) - 2025-08-09

### Features

- *(ws)* Expose the `message` module for external use ([#874](https://github.com/0x676e67/wreq/issues/874)) - ([abed4ac](https://github.com/0x676e67/wreq/commit/abed4ac82d8ad82c72593ad931477acea70557b0))

### Refactor

- *(cookie)* Refactor legacy jar cookie implementation ([#871](https://github.com/0x676e67/wreq/issues/871)) - ([ebb1504](https://github.com/0x676e67/wreq/commit/ebb1504400102c71af9d76e9084f8d2ea14c16c7))
- *(dns)* Consolidate legacy DNS modules ([#876](https://github.com/0x676e67/wreq/issues/876)) - ([f54367c](https://github.com/0x676e67/wreq/commit/f54367cad0d5c699596f80857af234e78ba3d166))

### Documentation

- *(module)* Improve module-level documentation ([#877](https://github.com/0x676e67/wreq/issues/877)) - ([4e2c15f](https://github.com/0x676e67/wreq/commit/4e2c15f39ba0bdf61b0aedb30d43779a4c455d58))
- *(tls)* Update documentation for configuration fields ([#880](https://github.com/0x676e67/wreq/issues/880)) - ([94c060e](https://github.com/0x676e67/wreq/commit/94c060ed2a3fcc744223ab6a7224e67fae8c9210))

### Performance

- *(upgrade)* Inline hot methods in async IO wrapper ([#875](https://github.com/0x676e67/wreq/issues/875)) - ([8388b52](https://github.com/0x676e67/wreq/commit/8388b5241a253bb8f550435aa9e487d9ce16b44d))

### Styling

- *(internal)* Refactor internal code layout and naming ([#878](https://github.com/0x676e67/wreq/issues/878)) - ([fbf11fd](https://github.com/0x676e67/wreq/commit/fbf11fd588cb773471fb46302405655eb53cafe6))

### Testing

- *(client)* Verify multiple identical headers are appended correctly ([#879](https://github.com/0x676e67/wreq/issues/879)) - ([f245f9c](https://github.com/0x676e67/wreq/commit/f245f9c47965ee4b7682050357f350e05a2ca549))

### Miscellaneous Tasks

- *(retry)* Remove unnecessary clone in request duplication - ([d78568c](https://github.com/0x676e67/wreq/commit/d78568cc6079aaefe3f3b02c3537e21646a1f7f0))

### Build

- *(ws)* Switch to runtime-agnostic WebSocket implementation ([#873](https://github.com/0x676e67/wreq/issues/873)) - ([3fb93ef](https://github.com/0x676e67/wreq/commit/3fb93efb76773d8349ade8f66fe3cabb543faa7b))


## [6.0.0-rc.4](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.2..v6.0.0-rc.4) - 2025-08-07

### Bug Fixes

- *(cookie)* Store response cookies even with manual `Cookie` header ([#868](https://github.com/0x676e67/wreq/issues/868)) - ([d2f3bf0](https://github.com/0x676e67/wreq/commit/d2f3bf0ec425ad4880dbcba03951f260f8bb1015))
- *(header)* Preserve multi-value headers in `OrigHeaderMap` sorting ([#867](https://github.com/0x676e67/wreq/issues/867)) - ([b650956](https://github.com/0x676e67/wreq/commit/b6509561c779dde492a1208a2fe5f7c64832419d))

### Refactor

- *(client)* Allow `?Sized` trait objects in `dns_resolver` ([#870](https://github.com/0x676e67/wreq/issues/870)) - ([2baf195](https://github.com/0x676e67/wreq/commit/2baf1953024fdb646e205478d9dc568113ba2ec1))

### Performance

- *(cookie)* Optimize cookie layer to skip unnecessary matching ([#866](https://github.com/0x676e67/wreq/issues/866)) - ([ce9b531](https://github.com/0x676e67/wreq/commit/ce9b531bd4d0211b73fb64211f51a8549c948cfc))


## [6.0.0-rc.2](https://github.com/0x676e67/wreq/compare/v6.0.0-rc.1..v6.0.0-rc.2) - 2025-08-04

### Bug Fixes

- *(build)* Resolve build failure on Windows when `default-features` are disabled ([#864](https://github.com/0x676e67/wreq/issues/864)) - ([4418e47](https://github.com/0x676e67/wreq/commit/4418e4773a711bf15a2e86777473f16b0af3d8e3))

### Documentation

- *(options)* Fix `Http2Options` description ([#863](https://github.com/0x676e67/wreq/issues/863)) - ([89b0957](https://github.com/0x676e67/wreq/commit/89b0957a196debafaeef6a6fa271a53b4a3f7964))


## [6.0.0-rc.1](https://github.com/0x676e67/wreq/compare/v5.1.0..v6.0.0-rc.1) - 2025-08-03

### Features

- *(client)* Set default values for TCP keepalive and user_timeout ([#852](https://github.com/0x676e67/wreq/issues/852)) - ([f06fe61](https://github.com/0x676e67/wreq/commit/f06fe616b72a8d672c9a6118acfab7b96f18bbb6))
- *(client)* Expose TCP socket Happy Eyeballs timeout API ([#844](https://github.com/0x676e67/wreq/issues/844)) - ([bcbfbf8](https://github.com/0x676e67/wreq/commit/bcbfbf802c03b6cf58eaa566d38b4a8c29037635))
- *(client)* Expose TCP socket send/recv buffer APIs ([#843](https://github.com/0x676e67/wreq/issues/843)) - ([2ea1052](https://github.com/0x676e67/wreq/commit/2ea105290434339cdf84a83afe4d6f65c864e09a))
- *(client)* Disable redirects by default ([#805](https://github.com/0x676e67/wreq/issues/805)) - ([ecf6019](https://github.com/0x676e67/wreq/commit/ecf60193deaa6951212d862445645e0ba9175cd7))
- *(client)* Add convenience method for sending `OPTIONS` requests ([#787](https://github.com/0x676e67/wreq/issues/787)) - ([34f1586](https://github.com/0x676e67/wreq/commit/34f158610a52228ad4d0bc665c268714c5b34e0d))
- *(client)* Make `HTTP`/`TLS` config options publicly accessible ([#783](https://github.com/0x676e67/wreq/issues/783)) - ([a4e7b98](https://github.com/0x676e67/wreq/commit/a4e7b981790942364b07f65333602f4fcbb68a7a))
- *(client)* Add `SO_REUSEADDR` support for tcp socket ([#762](https://github.com/0x676e67/wreq/issues/762)) - ([8aced63](https://github.com/0x676e67/wreq/commit/8aced637eed476faeb2212930ba91570a0c4cbda))
- *(client)* Add tower HTTP request middleware layer ([#694](https://github.com/0x676e67/wreq/issues/694)) - ([0ad0021](https://github.com/0x676e67/wreq/commit/0ad0021bde7dd890aa58e3a1d4f422984fab9eec))
- *(client)* Add tcp_user_timeout builder option ([#688](https://github.com/0x676e67/wreq/issues/688)) - ([d1d0eb4](https://github.com/0x676e67/wreq/commit/d1d0eb459b4859a73fc7b75934804bfa30bc907a))
- *(client)* Add tcp_keepalive_interval and tcp_keepalive_retries to ClientBuilder ([#643](https://github.com/0x676e67/wreq/issues/643)) - ([32fe31e](https://github.com/0x676e67/wreq/commit/32fe31e0b6aca538909d3e5367d12d58269bf818))
- *(client)* Drop API for retrieving default headers ([#640](https://github.com/0x676e67/wreq/issues/640)) - ([1b4a445](https://github.com/0x676e67/wreq/commit/1b4a4451fb7bd28e610431a12b2a427b3da64e9b))
- *(client)* Add identity to be used for client certificate authentication ([#617](https://github.com/0x676e67/wreq/issues/617)) - ([55c2490](https://github.com/0x676e67/wreq/commit/55c249067c267099c400119e12491441e4c0e63a))
- *(client)* Adds support for SSLKEYLOGFILE output from client ([#605](https://github.com/0x676e67/wreq/issues/605)) - ([dc0c40b](https://github.com/0x676e67/wreq/commit/dc0c40bed2faa7b743d5a22496e83029a9b84dcf))
- *(client)* ClientBuilder::interface on Solarish OS ([#594](https://github.com/0x676e67/wreq/issues/594)) - ([c0a7fbc](https://github.com/0x676e67/wreq/commit/c0a7fbcaf98f276de74e9b11dbc23f5bb5ce457c))
- *(cookie)* Provide access to raw cookie API ([#830](https://github.com/0x676e67/wreq/issues/830)) - ([5c5e3e5](https://github.com/0x676e67/wreq/commit/5c5e3e5ccdc3383c7c2b71fe4954da039882f877))
- *(emulation)* Expose config fields via accessors while preserving `non_exhaustive` ([#854](https://github.com/0x676e67/wreq/issues/854)) - ([dfdf707](https://github.com/0x676e67/wreq/commit/dfdf707e3fb7ca6f3800e4741572eb51323d06cb))
- *(error)* Report custom reason phrase in error message ([#767](https://github.com/0x676e67/wreq/issues/767)) - ([b492bc1](https://github.com/0x676e67/wreq/commit/b492bc1d408f1742c1f1e688784707f877cc1d5b))
- *(error)* Check if the error is an upgrade error ([#623](https://github.com/0x676e67/wreq/issues/623)) - ([ddae516](https://github.com/0x676e67/wreq/commit/ddae516928663b2a9a181eb387dc1ff9aa567c79))
- *(examples)* Add emulation twitter android  `TLS`/`HTTP2` example ([#612](https://github.com/0x676e67/wreq/issues/612)) - ([40c9a70](https://github.com/0x676e67/wreq/commit/40c9a70ad015e4f8db1e9dac8416c61b25d05318))
- *(header)* Enhance the usability of `OriginalHeaders` API ([#731](https://github.com/0x676e67/wreq/issues/731)) - ([99bfc39](https://github.com/0x676e67/wreq/commit/99bfc391dc5e90f439576da282f94be9bb78b1f8))
- *(headers)* Omit payload length for HTTP/2 `OPTIONS` ([#785](https://github.com/0x676e67/wreq/issues/785)) - ([bb00275](https://github.com/0x676e67/wreq/commit/bb00275602ea2468d42ee4674652315b4ae2dc6d))
- *(http2)* Upgrade `http2` dependency to 0.5.0 ([#651](https://github.com/0x676e67/wreq/issues/651)) - ([a21827b](https://github.com/0x676e67/wreq/commit/a21827bb30bc656d9ae0e71a5e6fa3cff4d6e94f))
- *(lib)* Export `EmulationBuilder` as a public API ([#825](https://github.com/0x676e67/wreq/issues/825)) - ([080f85f](https://github.com/0x676e67/wreq/commit/080f85f1021a5555586b986c4e6addaabaeba018))
- *(pool)* Distinguish connections by request emulation ([#841](https://github.com/0x676e67/wreq/issues/841)) - ([67884ee](https://github.com/0x676e67/wreq/commit/67884eea31720d743c98bca27b8c9fea02a2f555))
- *(redirect)* Per-request redirect config support ([#710](https://github.com/0x676e67/wreq/issues/710)) - ([265df64](https://github.com/0x676e67/wreq/commit/265df646689eceb08ab020535f756ce055182ec1))
- *(request)* Support per-request emulation configuration ([#759](https://github.com/0x676e67/wreq/issues/759)) - ([2ec6d21](https://github.com/0x676e67/wreq/commit/2ec6d21ad9ba1c815c81c9152fc35f70744b7211))
- *(request)* Adjust internal structure and allow skip default headers ([#723](https://github.com/0x676e67/wreq/issues/723)) - ([7be331d](https://github.com/0x676e67/wreq/commit/7be331d2dffc4dbe5226c95c5b8b3dd96897a324))
- *(request)* Setting headers order at the request level ([#602](https://github.com/0x676e67/wreq/issues/602)) - ([3b280f8](https://github.com/0x676e67/wreq/commit/3b280f845538e12a92f0976b9455604f8260ef90))
- *(response)* Add `Response.local_addr()` to get local address ([#835](https://github.com/0x676e67/wreq/issues/835)) - ([35652f5](https://github.com/0x676e67/wreq/commit/35652f547fc293a8339b5e475fd5e8b41e2fafd3))
- *(tls)* Treat different TLS configs as distinct sessions ([#779](https://github.com/0x676e67/wreq/issues/779)) - ([e05406d](https://github.com/0x676e67/wreq/commit/e05406d4bfdb93837c9168fecd24a467908ba7a5))
- *(tls)* Add API to set list of stable curves ([#633](https://github.com/0x676e67/wreq/issues/633)) - ([ea0eb17](https://github.com/0x676e67/wreq/commit/ea0eb17ed425d6477eebe629b7851f0e51a1bc75))
- *(websocket)* Support per-request emulation configuration ([#764](https://github.com/0x676e67/wreq/issues/764)) - ([468f86f](https://github.com/0x676e67/wreq/commit/468f86fd5811043a1d89437f1bea30c8cfbf93b8))
- *(ws)* Add support for header order on websocket builder ([#608](https://github.com/0x676e67/wreq/issues/608)) - ([ad9e0b9](https://github.com/0x676e67/wreq/commit/ad9e0b97d5733a800b17c32851c1824da83d05c4))

### Bug Fixes

- *(client)* Fix `HTTP/2` safe retry policy ([#715](https://github.com/0x676e67/wreq/issues/715)) - ([3a5c356](https://github.com/0x676e67/wreq/commit/3a5c35697d12dcf67d30db88abb8d1fe37b638a7))
- *(client)* Prevent future stack overflow in request handling ([#685](https://github.com/0x676e67/wreq/issues/685)) - ([402ffe3](https://github.com/0x676e67/wreq/commit/402ffe3184362a18696791621261c744a5f413b2))
- *(client)* Update client to retain tls keylog configuration ([#619](https://github.com/0x676e67/wreq/issues/619)) - ([22c0770](https://github.com/0x676e67/wreq/commit/22c0770d3a123fa2569d9174112fa7c2a309220f))
- *(client)* Fix `HTTP2` extensions to be applied in retry requests ([#596](https://github.com/0x676e67/wreq/issues/596)) - ([a1f0d32](https://github.com/0x676e67/wreq/commit/a1f0d32ede0bb146230781603d532217ccdc0430))
- *(core)* Improve client errors details if available ([#665](https://github.com/0x676e67/wreq/issues/665)) - ([fb41f70](https://github.com/0x676e67/wreq/commit/fb41f70c7b70a556c2a97f9b699049a5e1fb58f4))
- *(dns)* Prefer IPv6 addresses before IPv4 even if resolver ordered differently ([#658](https://github.com/0x676e67/wreq/issues/658)) - ([e913768](https://github.com/0x676e67/wreq/commit/e913768cf1be11b277b9b84b2f31b0090e426450))
- *(error)* Error::is_timeout() checks for crate::core::Error::is_timeout() - ([34e79f1](https://github.com/0x676e67/wreq/commit/34e79f1ea81085c66e9ffb66066c8a35254ebdc1))
- *(error)* Include request URL in error messages ([#737](https://github.com/0x676e67/wreq/issues/737)) - ([f312645](https://github.com/0x676e67/wreq/commit/f312645c31f53bcbf24d3899132b6fd9af890beb))
- *(hash)* Fix #780 ([#784](https://github.com/0x676e67/wreq/issues/784)) - ([7b5808d](https://github.com/0x676e67/wreq/commit/7b5808dbb6073cb81e657aedb19ce2f9965875d5))
- *(http2)* Rename `unknown_setting8` to `enable_connect_protocol` ([#647](https://github.com/0x676e67/wreq/issues/647)) - ([3464105](https://github.com/0x676e67/wreq/commit/34641053a7e2f6737ccf9803cc7ab02cc9d3c103))
- *(pool)* Cap pool idle interval to a minimum ([#814](https://github.com/0x676e67/wreq/issues/814)) - ([daba062](https://github.com/0x676e67/wreq/commit/daba06298e60ef67a8a57de15aaad0ac071294be))
- *(pool)* Don't spawn pool idle interval if timeout is 0 ([#806](https://github.com/0x676e67/wreq/issues/806)) - ([a6deeb4](https://github.com/0x676e67/wreq/commit/a6deeb44b8e8d67e322a33759b264bc81a17e7d4))
- *(proxy)* Restore default port 1080 for SOCKS proxies without explicit port ([#821](https://github.com/0x676e67/wreq/issues/821)) - ([256de2b](https://github.com/0x676e67/wreq/commit/256de2bb5ff60bd0f040277e0020ef84d0ea8b12))
- *(proxy)* Set https system proxy on windows ([#678](https://github.com/0x676e67/wreq/issues/678)) - ([7111b13](https://github.com/0x676e67/wreq/commit/7111b131db66abdddbbccafa5450f3d1637d229b))
- *(redirect)* Make the number of redirects of policy matches its maximum limit ([#629](https://github.com/0x676e67/wreq/issues/629)) - ([85bad99](https://github.com/0x676e67/wreq/commit/85bad9996a9d8785feb92cf3d2c3c845bc10a306))
- *(request)* Fix headers order ([#603](https://github.com/0x676e67/wreq/issues/603)) - ([9c85532](https://github.com/0x676e67/wreq/commit/9c8553229f62c901a2b739fed413be08fa558d4b))
- *(tls)* Fix encoding error when multiple ALPS extensions are present ([#861](https://github.com/0x676e67/wreq/issues/861)) - ([6ce6c73](https://github.com/0x676e67/wreq/commit/6ce6c73cd0479a169d0f7e6f90c4073cf6e3fc0a))
- *(ws)* Improve status code message on WebSocket upgrade failure ([#824](https://github.com/0x676e67/wreq/issues/824)) - ([4f6f6da](https://github.com/0x676e67/wreq/commit/4f6f6da67bc990be1753c4bb8e546c1b7ed35889))

### Refactor

- *(client)* Use `Either` to unify generic and boxed `Client` service types ([#849](https://github.com/0x676e67/wreq/issues/849)) - ([9cb05e7](https://github.com/0x676e67/wreq/commit/9cb05e794a6d5f1421482e15117ece37180099a7))
- *(client)* Move HTTP/2 safe retry logic into `tower` middleware ([#713](https://github.com/0x676e67/wreq/issues/713)) - ([136c791](https://github.com/0x676e67/wreq/commit/136c7912b54bb74cecc48618415a64f865d7830c))
- *(client)* Move read timeout logic into `tower` middleware ([#702](https://github.com/0x676e67/wreq/issues/702)) - ([06d5e47](https://github.com/0x676e67/wreq/commit/06d5e47f7dfb6353553d9bf5e99b185f644c19fd))
- *(client)* Move total timeout logic into Tower middleware ([#701](https://github.com/0x676e67/wreq/issues/701)) - ([ed8b2ea](https://github.com/0x676e67/wreq/commit/ed8b2eab0ee71278fd2f787089026cb66f64dd29))
- *(client)* Remove legacy HTTP/1 and HTTP/2 tuning options ([#644](https://github.com/0x676e67/wreq/issues/644)) - ([f019267](https://github.com/0x676e67/wreq/commit/f019267dd11fc7dd5ce4ab72b4c85a689a206710))
- *(client)* Replace header map by key - ([6012542](https://github.com/0x676e67/wreq/commit/60125429e1764e50b064c835a77e009e06a18827))
- *(client)* Replace header map by key ([#618](https://github.com/0x676e67/wreq/issues/618)) - ([237b17a](https://github.com/0x676e67/wreq/commit/237b17a649cf201fbac706044bb665e84c514804))
- *(config)* Replace duplicate types with type aliases ([#740](https://github.com/0x676e67/wreq/issues/740)) - ([6bb210b](https://github.com/0x676e67/wreq/commit/6bb210b95d550ac415e7fea3d142d2296e1d4fa1))
- *(config)* Unify request extensions config processing ([#712](https://github.com/0x676e67/wreq/issues/712)) - ([fb1b7b2](https://github.com/0x676e67/wreq/commit/fb1b7b2f3aab1e2c02ee9a0927ae5750e0ae740e))
- *(config)* Remove public config fields and improve backward compatibility ([#614](https://github.com/0x676e67/wreq/issues/614)) - ([6631c5c](https://github.com/0x676e67/wreq/commit/6631c5c9f4489b5b323eab25d953fb9d13b698f8))
- *(connect)* Modularize components by responsibility ([#819](https://github.com/0x676e67/wreq/issues/819)) - ([c996ec7](https://github.com/0x676e67/wreq/commit/c996ec7b0b6dca703b75b0007f9f36b142c9cc64))
- *(connect)* Remove `Connect` trait alias wrapper around `tower::Service` ([#807](https://github.com/0x676e67/wreq/issues/807)) - ([947a25b](https://github.com/0x676e67/wreq/commit/947a25b7f158f84c8483fbf18e780dc4747970b2))
- *(connect)* Streamline connector builder structure ([#705](https://github.com/0x676e67/wreq/issues/705)) - ([eb9308b](https://github.com/0x676e67/wreq/commit/eb9308bb3ded0b9fd6eabd77a947738f9ac78705))
- *(connect)* Cleanup dead code for `tracing` feature ([#689](https://github.com/0x676e67/wreq/issues/689)) - ([5574786](https://github.com/0x676e67/wreq/commit/5574786b1a2572a13b5dea8c59e554cf9b63acf0))
- *(connect)* Refactored internal connector builder - ([39f779b](https://github.com/0x676e67/wreq/commit/39f779b90b3a12705f5658f6a3c43a00c721d88e))
- *(cookie)* Integrate cookie store into `tower` layer ([#695](https://github.com/0x676e67/wreq/issues/695)) - ([c0cf8e3](https://github.com/0x676e67/wreq/commit/c0cf8e396b5b9743e6b19b9b59b60753a3052802))
- *(cookie)* Remove redundant store abstraction API ([#635](https://github.com/0x676e67/wreq/issues/635)) - ([8e34a91](https://github.com/0x676e67/wreq/commit/8e34a913e45cf684711c9c5c45a7e62f48d62cee))
- *(core)* Separate `body` and `proto` responsibilities ([#839](https://github.com/0x676e67/wreq/issues/839)) - ([9e65c9f](https://github.com/0x676e67/wreq/commit/9e65c9f1d4d4a00ded6a3916e74a99486cb41eb6))
- *(core)* Add socket addr to ConnectError ([#663](https://github.com/0x676e67/wreq/issues/663)) - ([877aa9c](https://github.com/0x676e67/wreq/commit/877aa9c7e791717a8c5ff106a376877d14442211))
- *(core)* Reduce dependency on `futures-util` ([#636](https://github.com/0x676e67/wreq/issues/636)) - ([87ed77b](https://github.com/0x676e67/wreq/commit/87ed77b02a251b65aed014a9d329a75a6d92e76a))
- *(core/client)* Remove old body delay_eof code ([#736](https://github.com/0x676e67/wreq/issues/736)) - ([a9d5db1](https://github.com/0x676e67/wreq/commit/a9d5db12aadfc17132c8444acaedb660ae67febe))
- *(decoder)* Migrate decompression handling to tower-http ([#720](https://github.com/0x676e67/wreq/issues/720)) - ([e2427d8](https://github.com/0x676e67/wreq/commit/e2427d8c60ea370ba092dda766d74ffd119e1655))
- *(dns)* Disable export of `hickory_resolver` module ([#646](https://github.com/0x676e67/wreq/issues/646)) - ([68fc1e4](https://github.com/0x676e67/wreq/commit/68fc1e4dcd65b0567a3e3b1fa4b485c42652d1b3))
- *(error)* Use standard library-style error handling ([#722](https://github.com/0x676e67/wreq/issues/722)) - ([97657fd](https://github.com/0x676e67/wreq/commit/97657fd816202dbd8f34a0f0733422dedd27184e))
- *(future)* Simplify `Client` future types with `Either` ([#851](https://github.com/0x676e67/wreq/issues/851)) - ([b6922d0](https://github.com/0x676e67/wreq/commit/b6922d0902dbe24daa656c06dcc4172b5193e43a))
- *(header)* Preserve header order and casing in `OrigHeaderMap` redesign ([#860](https://github.com/0x676e67/wreq/issues/860)) - ([cc0e637](https://github.com/0x676e67/wreq/commit/cc0e637798a115f4fdc41a1fd3799c5bdd10e127))
- *(http1)* Remove support for `title_case_headers` - ([4501d9a](https://github.com/0x676e67/wreq/commit/4501d9ace91a6adab041cddc8ce6d5e964e278c8))
- *(http2)* Add decriptive error for non-empty body in CONNECT request ([#634](https://github.com/0x676e67/wreq/issues/634)) - ([fa413e6](https://github.com/0x676e67/wreq/commit/fa413e629687df306d937d3f69e64619c80ad524))
- *(internally)* Normalize internal module structure ([#790](https://github.com/0x676e67/wreq/issues/790)) - ([8b768e7](https://github.com/0x676e67/wreq/commit/8b768e7579cacf8c85cb580abb47c88b9b7662dd))
- *(internally)* Backport hyper client ([#624](https://github.com/0x676e67/wreq/issues/624)) - ([4efc5a7](https://github.com/0x676e67/wreq/commit/4efc5a7c227dd257ca866fe1772341803d3c91bc))
- *(internally)* Refactor internal certificate loading ([#616](https://github.com/0x676e67/wreq/issues/616)) - ([2bf9da8](https://github.com/0x676e67/wreq/commit/2bf9da8b0defd4f805fccbd60d4468b14c9dfcdd))
- *(io)* Drop duplicated legacy IO code ([#836](https://github.com/0x676e67/wreq/issues/836)) - ([0b22b58](https://github.com/0x676e67/wreq/commit/0b22b585d7da3f7375d4d42d109f056c3769a089))
- *(layer)* Simplify tower `Service` error conversion ([#850](https://github.com/0x676e67/wreq/issues/850)) - ([e577afc](https://github.com/0x676e67/wreq/commit/e577afc903ff416b6db486b0e7c2fe0112914cf9))
- *(module)* Separate hash responsibilities ([#856](https://github.com/0x676e67/wreq/issues/856)) - ([a5f5caa](https://github.com/0x676e67/wreq/commit/a5f5caadd3513bd8d70081d20a131bd77fdc8451))
- *(module)* Separate util responsibilities ([#838](https://github.com/0x676e67/wreq/issues/838)) - ([9756969](https://github.com/0x676e67/wreq/commit/975696987c4e04a570f7af7fbd2f81de7de932b4))
- *(module)* Separate `proxy` and `client` responsibilities ([#833](https://github.com/0x676e67/wreq/issues/833)) - ([6b71f74](https://github.com/0x676e67/wreq/commit/6b71f74f70179a3499480b10d19f9bd26f0c5bd9))
- *(pool)* Simplify idle task using async/await ([#812](https://github.com/0x676e67/wreq/issues/812)) - ([808da8c](https://github.com/0x676e67/wreq/commit/808da8ceda00e88188339fde3477f097ce4d12a3))
- *(proxy)* Remove duplicated basic auth encoder ([#845](https://github.com/0x676e67/wreq/issues/845)) - ([5b0cf72](https://github.com/0x676e67/wreq/commit/5b0cf72b98be499c9fe4fe8a789d8ac8f9dbf88f))
- *(proxy)* Replace string comparison with constant comparison ([#820](https://github.com/0x676e67/wreq/issues/820)) - ([d5d60ab](https://github.com/0x676e67/wreq/commit/d5d60ab5c4b445e4584dbec8e65c801f6a6baaf2))
- *(proxy)* Remove support for `Proxy::custom` ([#756](https://github.com/0x676e67/wreq/issues/756)) - ([1a5a36a](https://github.com/0x676e67/wreq/commit/1a5a36a5b26de80f70f5116cfdf86806f39f2938))
- *(proxy)* Migrate proxy matcher from hyper-util ([#675](https://github.com/0x676e67/wreq/issues/675)) - ([fafe3a6](https://github.com/0x676e67/wreq/commit/fafe3a615319386ab5a908780996d61ab87dbe61))
- *(redirect)* Migrate from `iri-string` to `url` crate for URI resolution ([#757](https://github.com/0x676e67/wreq/issues/757)) - ([7b72c18](https://github.com/0x676e67/wreq/commit/7b72c18707c661e3e2eb4256a3d6aa00c6c1dd51))
- *(redirect)* Redesign redirection logic in `tower` middleware ([#708](https://github.com/0x676e67/wreq/issues/708)) - ([a53ce43](https://github.com/0x676e67/wreq/commit/a53ce43adde765be625fc5e1b176fffdfd5c0975))
- *(rewind)* Replace manual implementations of `ReadBufCursor` methods ([#595](https://github.com/0x676e67/wreq/issues/595)) - ([e11e214](https://github.com/0x676e67/wreq/commit/e11e214248f8a9bbe1a998f70b823f026035f3f6))
- *(service)* Eliminate unnecessary URL parsing ([#831](https://github.com/0x676e67/wreq/issues/831)) - ([4339692](https://github.com/0x676e67/wreq/commit/4339692b7333c8be6c6ed779ac8f172aaca12e40))
- *(socks)* Migrate to `tokio-socks` for easier maintenance ([#766](https://github.com/0x676e67/wreq/issues/766)) - ([b405fda](https://github.com/0x676e67/wreq/commit/b405fda0da727f35457a2a8b751be5c27455c50c))
- *(socks)* Reuse socks module logic from hyper-util ([#686](https://github.com/0x676e67/wreq/issues/686)) - ([ecb1493](https://github.com/0x676e67/wreq/commit/ecb1493d6cc259bf754ffdc0c93fd946c6a47d97))
- *(timeout)* Simplify `Pin<B>` wrapping ([#732](https://github.com/0x676e67/wreq/issues/732)) - ([40518b6](https://github.com/0x676e67/wreq/commit/40518b6d4488474f098661de1f11393931d9ccdd))
- *(tls)* Allow setting `ALPN`/`ALPS` protocol preference order ([#743](https://github.com/0x676e67/wreq/issues/743)) - ([7d7f65f](https://github.com/0x676e67/wreq/commit/7d7f65f7e70194a4ec69af143d906302dd587486))
- *(tls)* Redesign certificate compression API for clarity and consistency ([#742](https://github.com/0x676e67/wreq/issues/742)) - ([7097c8d](https://github.com/0x676e67/wreq/commit/7097c8da26db2b7ac28287de257e0477ca1d0043))
- *(tls)* Remove unnecessary lazy closure from `TlsConnector` ([#739](https://github.com/0x676e67/wreq/issues/739)) - ([37cd919](https://github.com/0x676e67/wreq/commit/37cd919b41cf74c241071e8b7cc8f6ba29f9864f))
- *(tls)* Refactor TLS keylog tracking policy ([#655](https://github.com/0x676e67/wreq/issues/655)) - ([d88c83d](https://github.com/0x676e67/wreq/commit/d88c83dd2db6953415a62cb395efa3f07d95e355))
- *(tls)* Remove configuration not associated with TLS extensions ([#654](https://github.com/0x676e67/wreq/issues/654)) - ([d62475f](https://github.com/0x676e67/wreq/commit/d62475f7d4766e4e2356dc21a39cf244b21c0d36))
- *(tls)* Refactor certificate compression algorithm configuration API ([#639](https://github.com/0x676e67/wreq/issues/639)) - ([058fc9a](https://github.com/0x676e67/wreq/commit/058fc9a6c9152d088d723369fe408c658b4eea6c))
- *(tls)* Fefactor extension permutation configuration API ([#638](https://github.com/0x676e67/wreq/issues/638)) - ([da9059b](https://github.com/0x676e67/wreq/commit/da9059b9d44a429dd82abf9d883209662ad5cdbe))
- *(tls)* Distinguish certificate identity from store ([#621](https://github.com/0x676e67/wreq/issues/621)) - ([89e2c5c](https://github.com/0x676e67/wreq/commit/89e2c5ce687dab7c08c6da7c77c089afd97a3ab8))
- *(websocket)* Standardize WebSocket module exports ([#645](https://github.com/0x676e67/wreq/issues/645)) - ([f61a89f](https://github.com/0x676e67/wreq/commit/f61a89f0cc0e1279469d70a99c055fea53e8d173))
- *(ws)* Refactor HTTP2 upgrade to WebSocket ([#802](https://github.com/0x676e67/wreq/issues/802)) - ([e7b7052](https://github.com/0x676e67/wreq/commit/e7b705234e68f9a0e39eb86791931d985506a04b))
- Restructure the core implementation of the client ([#668](https://github.com/0x676e67/wreq/issues/668)) - ([1d445cb](https://github.com/0x676e67/wreq/commit/1d445cb15f444e8104cb264a0fae2e05091e3b8d))
- Store request timeout in request extensions instead ([#660](https://github.com/0x676e67/wreq/issues/660)) - ([e666be4](https://github.com/0x676e67/wreq/commit/e666be434af04458a86a4f8ae3d7bd1cf624002c))
- Remove futures-util unless using stream/multipart/compression/websocket/core ([#653](https://github.com/0x676e67/wreq/issues/653)) - ([e3d0c9f](https://github.com/0x676e67/wreq/commit/e3d0c9f960dd7803e83b2c024d1e5f736bccd50c))
- Drop futures-util for leaner core ([#648](https://github.com/0x676e67/wreq/issues/648)) - ([f46c161](https://github.com/0x676e67/wreq/commit/f46c1618e6a42722f024acad7db526b121536b44))
- Backport use `hyper-util` Tunnel ([#642](https://github.com/0x676e67/wreq/issues/642)) - ([446719d](https://github.com/0x676e67/wreq/commit/446719daecf7e4e2479f7c7b5f3785c6da2bddad))
- Renamed `tls_key_log_file` to `tls_keylog_file` for consistency ([#610](https://github.com/0x676e67/wreq/issues/610)) - ([5d1a85a](https://github.com/0x676e67/wreq/commit/5d1a85a1cc04a2380091398dee43146823590545))

### Documentation

- *(README)* Update for HTTP/3 over QUIC support - ([bba899c](https://github.com/0x676e67/wreq/commit/bba899c2b579f97a399b628c71f179ed07236a75))
- *(client)* Update `tcp_user_timeout` docs - ([1fa4d44](https://github.com/0x676e67/wreq/commit/1fa4d44394bd3fe1efe3bbbbd127a05cfc80d20d))
- *(client)* Clarify `Client` method usage ([#795](https://github.com/0x676e67/wreq/issues/795)) - ([3f56875](https://github.com/0x676e67/wreq/commit/3f56875e6c58176b7a73ed0464b0e6fcf5e16f8c))
- *(client)* Update `tower` middleware integration documentation ([#716](https://github.com/0x676e67/wreq/issues/716)) - ([6094176](https://github.com/0x676e67/wreq/commit/60941762e8addec2788c3ae97cf7714eab9967cd))
- *(connect)* Update docs for `Connector` builder - ([62b3b4a](https://github.com/0x676e67/wreq/commit/62b3b4a7291847faf36b694513ab38970fd3bda2))
- *(layer)* Update docs - ([ff14827](https://github.com/0x676e67/wreq/commit/ff1482791d218acff48469c04af4bccc8e38e44b))
- *(middleware)* Update module docs - ([b6b7071](https://github.com/0x676e67/wreq/commit/b6b7071c74844f365ffb4aa137f29be3f73cfd02))
- *(proxy)* Fix some typos in comment ([#592](https://github.com/0x676e67/wreq/issues/592)) - ([25f85b0](https://github.com/0x676e67/wreq/commit/25f85b06ce72181009e8e2727977557b47df4c68))
- *(timeout)* Update docs - ([512fa22](https://github.com/0x676e67/wreq/commit/512fa2281e665cb79e459ce6e3b5d6e124aed25a))
- *(tls)* Update prefer chacha20 documentation - ([9652f46](https://github.com/0x676e67/wreq/commit/9652f46735ad774e956b747fd2c2ff4f3dcb7bd9))
- *(ws)* Remove redundant comments - ([b401440](https://github.com/0x676e67/wreq/commit/b4014407690c8c73850c2a4299553f336e659fe5))
- *(x509)* Clarify thread safety and usage of CertStore ([#846](https://github.com/0x676e67/wreq/issues/846)) - ([f1423f8](https://github.com/0x676e67/wreq/commit/f1423f8414ff01bb4b1c3e5318e1f917754ab9ca))
- Revise and correct API documentation ([#724](https://github.com/0x676e67/wreq/issues/724)) - ([458e473](https://github.com/0x676e67/wreq/commit/458e4731ff25ca2625c4c2c53921be66c8a6bb8b))
- Improve formatting in documentation ([#696](https://github.com/0x676e67/wreq/issues/696)) - ([867a8a2](https://github.com/0x676e67/wreq/commit/867a8a273028926a838f71e7b6ead728c3234d11))
- Fix package docs - ([da20f76](https://github.com/0x676e67/wreq/commit/da20f766e9a25cad0cff7c128be8f7f1c0f2099e))
- Cleanup legacy server documentation - ([7a0b11c](https://github.com/0x676e67/wreq/commit/7a0b11cf8f013e644d63d70d07a0e21289c86bb9))
- Update documentation build ([#609](https://github.com/0x676e67/wreq/issues/609)) - ([eb06ebc](https://github.com/0x676e67/wreq/commit/eb06ebc81ac24ae821c4756196b58585303b723a))

### Performance

- *(client)* Avoid full `ClientRef` clone by matching and cloning service in-place ([#758](https://github.com/0x676e67/wreq/issues/758)) - ([8e547ad](https://github.com/0x676e67/wreq/commit/8e547ad17a504a230eb770a1ce3b92b6d0765186))
- *(client)* Replace `Box<dyn Trait>` with generic type for `Box<T>` ([#755](https://github.com/0x676e67/wreq/issues/755)) - ([eb07a2a](https://github.com/0x676e67/wreq/commit/eb07a2af08afb8be084f6623625af0f13a87745a))
- *(client)* Optimize dyn trait response to reduce runtime overhead ([#746](https://github.com/0x676e67/wreq/issues/746)) - ([0d5cbaf](https://github.com/0x676e67/wreq/commit/0d5cbaf03ff4646c0b81152022fb223a2ffee329))
- *(client)* Optimize response future wrapping calls ([#726](https://github.com/0x676e67/wreq/issues/726)) - ([e24a0cd](https://github.com/0x676e67/wreq/commit/e24a0cdc422576f68b450f7b96c678fc2655f400))
- *(client)* Remove redundant execute request calls ([#718](https://github.com/0x676e67/wreq/issues/718)) - ([4285cf7](https://github.com/0x676e67/wreq/commit/4285cf7278813a9c2e6e1de7d77bfe7c9fc82470))
- *(client)* Avoid redundant box of `tower` layers ([#717](https://github.com/0x676e67/wreq/issues/717)) - ([0ae67f8](https://github.com/0x676e67/wreq/commit/0ae67f8b6aed1b956d1314fa2dc03f310f430286))
- *(connect)* Simplify complex `TokioIo` wrapper ([#763](https://github.com/0x676e67/wreq/issues/763)) - ([807c33b](https://github.com/0x676e67/wreq/commit/807c33b0a2e47ef5da081b475c584541f27a54d0))
- *(connect)* Embed single timeout layer directly to avoid `Box::pin` ([#725](https://github.com/0x676e67/wreq/issues/725)) - ([9d24080](https://github.com/0x676e67/wreq/commit/9d2408034372617a49f863f4fab9be381e46f1d7))
- *(cookie)* Avoid redundant conditional checks ([#730](https://github.com/0x676e67/wreq/issues/730)) - ([574ab8e](https://github.com/0x676e67/wreq/commit/574ab8ef32b8fd91007681d987336e518802c27e))
- *(cookie)* Avoid unnecessary URL parsing in cookie handling ([#699](https://github.com/0x676e67/wreq/issues/699)) - ([fa07991](https://github.com/0x676e67/wreq/commit/fa079912830a947df50632dd98751f7f351d5b4d))
- *(decoder)* Avoid unnecessary clone of decompression service ([#828](https://github.com/0x676e67/wreq/issues/828)) - ([ce78205](https://github.com/0x676e67/wreq/commit/ce78205750b08ae9c2565118870c9974681dd95e))
- *(ext)* Avoid deep calls when inlining is disabled ([#799](https://github.com/0x676e67/wreq/issues/799)) - ([e14a159](https://github.com/0x676e67/wreq/commit/e14a1592f68e235af88a275d52ce7b21f7a3306e))
- *(hash)* Improve hashing efficiency for large structures ([#780](https://github.com/0x676e67/wreq/issues/780)) - ([7a7730e](https://github.com/0x676e67/wreq/commit/7a7730e2c71b0005a31ce94298236691be5a5750))
- *(proxy)* Remove unnecessary sorting from `HeaderMap` ([#857](https://github.com/0x676e67/wreq/issues/857)) - ([2de64fe](https://github.com/0x676e67/wreq/commit/2de64fe14c591d07c07cf28d582dc8bebe7069d5))
- *(proxy)* Remove unnecessary call wrapping ([#855](https://github.com/0x676e67/wreq/issues/855)) - ([2472d39](https://github.com/0x676e67/wreq/commit/2472d39e2128740e437c3d0846f18ea0ff96c148))
- *(proxy)* Use zero-copy Bytes for proxy credentials ([#729](https://github.com/0x676e67/wreq/issues/729)) - ([5bb8e06](https://github.com/0x676e67/wreq/commit/5bb8e06499613d13fab1dc573ce8a1b61b70c23f))
- *(redirect)* Avoid copy when redirection is unsupported ([#728](https://github.com/0x676e67/wreq/issues/728)) - ([741b81e](https://github.com/0x676e67/wreq/commit/741b81edc5201f79542c7e09eb3d46b0f3440062))
- *(req/resp)* Inline frequently called accessor methods - ([7dc3424](https://github.com/0x676e67/wreq/commit/7dc3424a807bb5c60481cb0c6fb6551be2cefacd))
- *(response)* Avoid unnecessary URL cloning ([#747](https://github.com/0x676e67/wreq/issues/747)) - ([95743b3](https://github.com/0x676e67/wreq/commit/95743b37522f8992803427809ed2e0a90ae7902d))
- *(socks)* Optimize SOCKS connection handling ([#769](https://github.com/0x676e67/wreq/issues/769)) - ([5d3fe85](https://github.com/0x676e67/wreq/commit/5d3fe8530dedf76f4fc937981a29fccfbfb764c1))
- *(socks)* Optimize DNS resolution with custom non-blocking resolver ([#687](https://github.com/0x676e67/wreq/issues/687)) - ([49520ce](https://github.com/0x676e67/wreq/commit/49520ce80b6211ec85abfda9655b9196e34c0438))
- *(timeout)* Encapsulate all per-request timeout extensions uniformly ([#804](https://github.com/0x676e67/wreq/issues/804)) - ([dab45fd](https://github.com/0x676e67/wreq/commit/dab45fde9c70e646d576f049e4a46b7c5113fcb3))
- *(timeout)* Reduce unnecessary `as_mut` calls ([#719](https://github.com/0x676e67/wreq/issues/719)) - ([fa9570c](https://github.com/0x676e67/wreq/commit/fa9570c35220963e2c17a0741edaebf0fc340974))
- *(tls)* Inline builder hot path code - ([bc2ff43](https://github.com/0x676e67/wreq/commit/bc2ff43c1b4c39293426cce42724db1b2afd789f))
- *(tls)* Flatten TLS info construction for better performance ([#847](https://github.com/0x676e67/wreq/issues/847)) - ([2ab4edd](https://github.com/0x676e67/wreq/commit/2ab4edd01c2c022ae4bda0312c3f6307371916e9))
- *(tls)* Connect stage reduces call chains - ([29c9bd8](https://github.com/0x676e67/wreq/commit/29c9bd8d9beae3be15de37693341e192b8225e0a))
- *(ws)* Inline frequently called accessor methods ([#782](https://github.com/0x676e67/wreq/issues/782)) - ([929d917](https://github.com/0x676e67/wreq/commit/929d91777539911994527ed6d15ebf31e463b689))
- Inline hotspot `poll` method to reduce call overhead ([#714](https://github.com/0x676e67/wreq/issues/714)) - ([8c26d8b](https://github.com/0x676e67/wreq/commit/8c26d8b8f58de8a00d7e0a17dc63ccdfe1145653))

### Styling

- *(client)* Shorten paths in type aliases ([#733](https://github.com/0x676e67/wreq/issues/733)) - ([c83b8e8](https://github.com/0x676e67/wreq/commit/c83b8e82a4b21d63c79922df09b737066e3f314d))
- *(connector)* Simplify user-defined timeout layer setup ([#827](https://github.com/0x676e67/wreq/issues/827)) - ([d620a25](https://github.com/0x676e67/wreq/commit/d620a252eb7549b8cdd079897736d2847e1019cc))
- *(cookie)* Sync upstream API style ([#659](https://github.com/0x676e67/wreq/issues/659)) - ([03041af](https://github.com/0x676e67/wreq/commit/03041af75026269db1763636390a3bf72fe000d4))
- *(proxy)* Simplify `Matcher` Debug implementation - ([f15f36e](https://github.com/0x676e67/wreq/commit/f15f36e158091bf352fcfc334d9056d84889e6f8))
- *(proxy)* Simplify path constraint for `http::Uri` - ([171e7b8](https://github.com/0x676e67/wreq/commit/171e7b83b6e8647f05313f9b4bfbf24e6300cc78))
- *(redirect)* Rename `TowerRedirectPolicy` to `RedirectPolicy` - ([1e4431b](https://github.com/0x676e67/wreq/commit/1e4431b92f765397f89f92f542111bf5e694682f))
- *(request)* Simplify request config access ([#793](https://github.com/0x676e67/wreq/issues/793)) - ([0f6f523](https://github.com/0x676e67/wreq/commit/0f6f5232510cb9cce4b437a9e81685377f56fae2))
- *(socks)* Clippy format - ([20c8236](https://github.com/0x676e67/wreq/commit/20c8236d85e87c1693e01e61566f9d6f46652055))
- *(tunnel)* Fmt code - ([1a489b5](https://github.com/0x676e67/wreq/commit/1a489b5305512094d43274659173f2625a45ba0c))
- Format crate imports for consistency ([#709](https://github.com/0x676e67/wreq/issues/709)) - ([777c6e5](https://github.com/0x676e67/wreq/commit/777c6e5e137024d6f09bf1b53eff7434e573cbb4))
- Fmt code - ([7fb9b1e](https://github.com/0x676e67/wreq/commit/7fb9b1e88df9e088b3920620c84aad1ea0d2a7bb))

### Testing

- *(badssl)* Enable test_aes_hw_override test - ([a37219a](https://github.com/0x676e67/wreq/commit/a37219a47b0903375d033cc9a5c6e3701dcb4b74))
- *(deps)* Bump `hyper-util` to v0.1.13 ([#667](https://github.com/0x676e67/wreq/issues/667)) - ([862361c](https://github.com/0x676e67/wreq/commit/862361cac33a200bddbdd2c6b3430da36bccadda))
- *(emulation)* Add tests for additional emulation options ([#823](https://github.com/0x676e67/wreq/issues/823)) - ([e0b76a8](https://github.com/0x676e67/wreq/commit/e0b76a8d40cf0795fc5a81704248edc88b55b439))
- *(emulation)* Add firefox tests ([#822](https://github.com/0x676e67/wreq/issues/822)) - ([6ed1974](https://github.com/0x676e67/wreq/commit/6ed1974744138b6d6f0cd678d652ec32fcab1751))
- *(timeout)* Update timeout tests ([#691](https://github.com/0x676e67/wreq/issues/691)) - ([3781cef](https://github.com/0x676e67/wreq/commit/3781cefb547d0052d8b96a781ec6096ce86e2a64))
- Remove redundant decompression tests ([#734](https://github.com/0x676e67/wreq/issues/734)) - ([8efcd19](https://github.com/0x676e67/wreq/commit/8efcd19925d654ff4cc4a2f61c70672e2890fa60))
- Tests affected by removal of proxy-related environment variables ([#692](https://github.com/0x676e67/wreq/issues/692)) - ([79648b5](https://github.com/0x676e67/wreq/commit/79648b531199cbe86b1c0db4d570e38cf25ff2da))
- Switch over from libflate to flate2 in tests to reduce dependency footprint ([#593](https://github.com/0x676e67/wreq/issues/593)) - ([dc74305](https://github.com/0x676e67/wreq/commit/dc74305dc83a19ce0f0320a91d42ee1e76f13860))

### Miscellaneous Tasks

- *(body)* Re-expose body mod - ([99e27f2](https://github.com/0x676e67/wreq/commit/99e27f203c2dd766707494f3c76f8f5a4d69b092))
- *(body)* Re-expose body mod - ([1d9ee72](https://github.com/0x676e67/wreq/commit/1d9ee729de0eacb68167506f456db871146ec85c))
- *(client)* Remove unused comment - ([efac842](https://github.com/0x676e67/wreq/commit/efac842c9d54bf4e6e7fd83779c4123dab81f48c))
- *(client)* Defer initialization of internal client ([#811](https://github.com/0x676e67/wreq/issues/811)) - ([f5817c6](https://github.com/0x676e67/wreq/commit/f5817c63aa020faf6146343b002cd912a5dbe6cc))
- *(client)* Fmt future.rs - ([3a6c265](https://github.com/0x676e67/wreq/commit/3a6c26545ed768e8e7a7ce73427bef538a74604c))
- *(client)* Eliminate redundant cloning of `tower` middleware ([#698](https://github.com/0x676e67/wreq/issues/698)) - ([c52bb1d](https://github.com/0x676e67/wreq/commit/c52bb1d6b7f5be7158d1cf28c7df41b90dd7fc14))
- *(client)* Refactor client into responsibility-specific modules ([#683](https://github.com/0x676e67/wreq/issues/683)) - ([d70a9f2](https://github.com/0x676e67/wreq/commit/d70a9f29ce0c6f7b66f60b1c83af16f906b72821))
- *(config)* Merge standalone `config` into `middleware/config` ([#771](https://github.com/0x676e67/wreq/issues/771)) - ([96168aa](https://github.com/0x676e67/wreq/commit/96168aa679a600d402eb1f4daca124ddcc16dd40))
- *(connect)* Simplify parameters and improve documentation ([#858](https://github.com/0x676e67/wreq/issues/858)) - ([0eb219b](https://github.com/0x676e67/wreq/commit/0eb219be71f8d005c48fcd80988e758f176f83da))
- *(connect)* Simplify conditional cfg for TCP keepalive ([#842](https://github.com/0x676e67/wreq/issues/842)) - ([0c40c3a](https://github.com/0x676e67/wreq/commit/0c40c3a09c5d4bf9dec805b2fa1e79fc686afa9a))
- *(connect)* Relocate `connect` module to `http` ([#818](https://github.com/0x676e67/wreq/issues/818)) - ([77b00be](https://github.com/0x676e67/wreq/commit/77b00be6dd2f3f46704a152bbde9fbdabf787f1e))
- *(connect)* Simplified type import - ([fe10748](https://github.com/0x676e67/wreq/commit/fe10748d88a23979192e5141a119c8d40dc49d22))
- *(connect)* Fmt code - ([53c9a24](https://github.com/0x676e67/wreq/commit/53c9a24ddc998f0bbde5812725ea869a63707ca7))
- *(connector)* Fmt code - ([a703915](https://github.com/0x676e67/wreq/commit/a703915da5d5f78ed4887bd868b3ebcf5f9b756c))
- *(cookie)* Cleanup unused error types - ([81bcf3f](https://github.com/0x676e67/wreq/commit/81bcf3fed32c6f00c133c794c9aa9162a42b0c81))
- *(cookie)* Fmt code - ([c9e03b1](https://github.com/0x676e67/wreq/commit/c9e03b1f39222c03d49a620189ba9131996189d2))
- *(core)* Format `http1` and `http2` options wrappers ([#813](https://github.com/0x676e67/wreq/issues/813)) - ([6803663](https://github.com/0x676e67/wreq/commit/680366361c809d226e08ab5e5cfcd9635c88a409))
- *(core)* Shorten `crate::core::Error` to `Error` via import ([#797](https://github.com/0x676e67/wreq/issues/797)) - ([1bd5666](https://github.com/0x676e67/wreq/commit/1bd5666143dcfcae2b020fb0fea06362375ceffe))
- *(core)* Remove unused `task` mod - ([121a46b](https://github.com/0x676e67/wreq/commit/121a46bcc0888ea0b7525cd2f0e29020da30da8a))
- *(core)* Remove unused `rewind` mod - ([e6a6ec0](https://github.com/0x676e67/wreq/commit/e6a6ec03bebf77332d26400104c6045268b87622))
- *(core)* Remove legacy code duplicated with `tower::util` ([#727](https://github.com/0x676e67/wreq/issues/727)) - ([ed218cf](https://github.com/0x676e67/wreq/commit/ed218cf18c1b6208aee727c77b1627b070f36559))
- *(core)* Remove duplicate code - ([a22bcf7](https://github.com/0x676e67/wreq/commit/a22bcf73888f5e53a6f77ed535c736c97146a8fb))
- *(decoder)* Merge standalone `decoder` into `middleware/decoder` ([#770](https://github.com/0x676e67/wreq/issues/770)) - ([b917192](https://github.com/0x676e67/wreq/commit/b917192b6e0e62374bf216974f006ccb52035696))
- *(dispatch)* Cleanup legacy unused code ([#796](https://github.com/0x676e67/wreq/issues/796)) - ([4153e07](https://github.com/0x676e67/wreq/commit/4153e07a38bf21c6d3ecfeb366948f1ea6684710))
- *(emulation)* Derive(Clone) for Emulation ([#862](https://github.com/0x676e67/wreq/issues/862)) - ([1ec7a09](https://github.com/0x676e67/wreq/commit/1ec7a093340c5c2f1c2c5fbc0b2adf60b388019a))
- *(example)* Format code in examples - ([a0e63c5](https://github.com/0x676e67/wreq/commit/a0e63c54b55ef4cda748609289d02a0caf570f89))
- *(example)* Update examples - ([b089c6e](https://github.com/0x676e67/wreq/commit/b089c6e892d214e48a43f5c53c896211219039f1))
- *(examples)* Update examples - ([b8b52ba](https://github.com/0x676e67/wreq/commit/b8b52ba3c86a6e29ec6c4e7f9f6c12d8688a0049))
- *(ext)* Encapsulate all per-request extensions uniformly ([#801](https://github.com/0x676e67/wreq/issues/801)) - ([d77d340](https://github.com/0x676e67/wreq/commit/d77d340e2d9c0b8c7440805c248b09797fe62d10))
- *(ext)* Move `http2::ext::Protocol` extension into request config ([#798](https://github.com/0x676e67/wreq/issues/798)) - ([b7cfbe9](https://github.com/0x676e67/wreq/commit/b7cfbe97ea7e9d03b3b9adb32d49ea665ea34566))
- *(internal)* Normalize internal error handling APIs ([#773](https://github.com/0x676e67/wreq/issues/773)) - ([65b574a](https://github.com/0x676e67/wreq/commit/65b574a2ea6b42b5f5f9c347d49e5a6c89382125))
- *(internal)* Normalize internal APIs ([#772](https://github.com/0x676e67/wreq/issues/772)) - ([3cfa301](https://github.com/0x676e67/wreq/commit/3cfa301080cb9a0dd97256a170f6801f5ce1b977))
- *(lib)* Sort module declarations - ([adc8b58](https://github.com/0x676e67/wreq/commit/adc8b58635acb638e1bcccf51801c65be5d07760))
- *(pool)* Eliminate type duplication with aliases - ([5ea3b07](https://github.com/0x676e67/wreq/commit/5ea3b07a62f85c5beb46ba673d26bf76415c06e6))
- *(proxy)* Assign proper connector names for `Tunnel` and `Socks` ([#815](https://github.com/0x676e67/wreq/issues/815)) - ([22d2be1](https://github.com/0x676e67/wreq/commit/22d2be1073988f8f7c76f592b731b0156c72c898))
- *(rt/tokio)* Cleanup unused code - ([c1c5e34](https://github.com/0x676e67/wreq/commit/c1c5e34a15c484d6829e03a2a903bbbf3357ccd3))
- *(socks)* Rename 'with_local_dns' to 'with_dns_mode' - ([7430a6a](https://github.com/0x676e67/wreq/commit/7430a6a213b278cb2f6356b0ed8da26d2cd323a2))
- *(sync)* Simplify lifetime annotations - ([834258c](https://github.com/0x676e67/wreq/commit/834258c75455a35be1c978b43deda8104af73876))
- *(sync)* Remove dead code - ([a628d1c](https://github.com/0x676e67/wreq/commit/a628d1c17b3748379a493245cf71254ce6800fbb))
- *(test)* Remove miri exception configs - ([0511365](https://github.com/0x676e67/wreq/commit/0511365422af4d70d045f9c00e34fd77e9c15a8d))
- *(tls)* Add examples for root and self-signed certificates ([#792](https://github.com/0x676e67/wreq/issues/792)) - ([8691db0](https://github.com/0x676e67/wreq/commit/8691db07db75ea5f6a9dafd9bc0c44cd3dadab20))
- *(tls)* Remove the legacy curves configuration API ([#637](https://github.com/0x676e67/wreq/issues/637)) - ([2459de9](https://github.com/0x676e67/wreq/commit/2459de97819e3eeb7b0569d99387e63ee099c6a4))
- *(types)* Merge `GenericClientService` related types - ([303584c](https://github.com/0x676e67/wreq/commit/303584cbfc832c9528439ba320651aada1d10504))
- *(x509)* Cleanup mixed parsing of pem/der certificates - ([edc4e7d](https://github.com/0x676e67/wreq/commit/edc4e7df38150f899b353b0766653b867a384e05))
- *(x509)* Cleanup dead code - ([42b741b](https://github.com/0x676e67/wreq/commit/42b741bef019e63b0c05d573a550c6e423458bac))
- Sort module declarations - ([8699a4b](https://github.com/0x676e67/wreq/commit/8699a4b2cc06990e9848962563289fa4a7b4b059))
- Remove unused `#[allow]` attributes ([#809](https://github.com/0x676e67/wreq/issues/809)) - ([5bc5cca](https://github.com/0x676e67/wreq/commit/5bc5cca594b4717d343e04b7a7b348b371be7486))
- Fix typo - ([7b800c5](https://github.com/0x676e67/wreq/commit/7b800c5efbe48899d9ae7e6f9a129a0d8459a990))
- Cleanup dead code - ([5be4443](https://github.com/0x676e67/wreq/commit/5be4443f78d0cbad72ffa640414e094d20e0fe09))
- Cleanup unused macros and format definitions - ([9f925d3](https://github.com/0x676e67/wreq/commit/9f925d384f5723c68001041c00e4865172f68c8e))
- Cleanup redundant and unused type exports ([#704](https://github.com/0x676e67/wreq/issues/704)) - ([a583a7f](https://github.com/0x676e67/wreq/commit/a583a7ff9e179efccdf6d4877792e09016029e7f))
- Clean up redundant type exports ([#684](https://github.com/0x676e67/wreq/issues/684)) - ([4af36f5](https://github.com/0x676e67/wreq/commit/4af36f5bbaa0ea1614e70e8a0c60a9bbb2079e93))
- Fmt example code ([#656](https://github.com/0x676e67/wreq/issues/656)) - ([7ad2496](https://github.com/0x676e67/wreq/commit/7ad24960c352257104d60d5be477631446e8793e))
- Apply clippy fixes required by CI ([#649](https://github.com/0x676e67/wreq/issues/649)) - ([d1e43d4](https://github.com/0x676e67/wreq/commit/d1e43d4a8019f73cb13c69ddf6e6c0852e95c5d3))
- Fix clippy module inception - ([6e66dd6](https://github.com/0x676e67/wreq/commit/6e66dd6fd18bb586a24a6988faea0398f7093923))
- Update examples and clean up dead code - ([636b510](https://github.com/0x676e67/wreq/commit/636b510a63ed4a3ff71abffc6c5eef24245fa889))
- Remove unused comments - ([ff484b2](https://github.com/0x676e67/wreq/commit/ff484b2888333b5e17adb3bd7681271ba6e6d201))

### Build

- *(deps)* Update tokio requirement from 1 to 1.47.0 - ([e7bab63](https://github.com/0x676e67/wreq/commit/e7bab6356d30115c2251eff8f9b10f7d7de58778))
- *(deps)* Update dependencies - ([42eaba7](https://github.com/0x676e67/wreq/commit/42eaba7444f6d19bb85200b58c8c837a25fbf146))
- *(deps)* Reduce dependency on `tokio-util` ([#837](https://github.com/0x676e67/wreq/issues/837)) - ([69c178d](https://github.com/0x676e67/wreq/commit/69c178dc3bb2655ff7dd5e782e957898f8933011))
- *(deps)* Simplify dev dependencies - ([2b6ae59](https://github.com/0x676e67/wreq/commit/2b6ae5925d79c19f6adb13cf1a1bb8c051a33eda))
- *(deps)* Simplify dev dependencies - ([9743ca7](https://github.com/0x676e67/wreq/commit/9743ca7138723659a5fb7946947c59518c3d0123))
- *(deps)* Update cookie_store requirement from 0.21 to 0.22 ([#829](https://github.com/0x676e67/wreq/issues/829)) - ([8453aa2](https://github.com/0x676e67/wreq/commit/8453aa272d8756fbd9a69d061803926d86f6774c))
- *(deps)* Update socket2 requirement from 0.5.10 to 0.6.0 ([#778](https://github.com/0x676e67/wreq/issues/778)) - ([73bd5a0](https://github.com/0x676e67/wreq/commit/73bd5a027e2dddaaa313ae19ed363cbea637cbf6))
- *(deps)* Drop `tower-service` (redundant with `tower::Service`) ([#800](https://github.com/0x676e67/wreq/issues/800)) - ([9de6cb3](https://github.com/0x676e67/wreq/commit/9de6cb31e417b00210d277ffd8460da5eb8e0eea))
- *(deps)* Remove redundant `atomic-waker` dependency ([#776](https://github.com/0x676e67/wreq/issues/776)) - ([b0cc9cd](https://github.com/0x676e67/wreq/commit/b0cc9cd6e96108a522b9299aaa8581d5f1780848))
- *(deps)* Remove redundant `futures-core` dep ([#774](https://github.com/0x676e67/wreq/issues/774)) - ([b04e162](https://github.com/0x676e67/wreq/commit/b04e162995afbabbbbc1dcf47464e2dd372a7574))
- *(deps)* Replace `lru` with faster `schnellru` implementation ([#754](https://github.com/0x676e67/wreq/issues/754)) - ([100bab9](https://github.com/0x676e67/wreq/commit/100bab9cfebf2df645314f83102fc4fa079e4479))
- *(deps)* Remove support for `rustls-native-certs` ([#752](https://github.com/0x676e67/wreq/issues/752)) - ([144bc8a](https://github.com/0x676e67/wreq/commit/144bc8abac0a0a38b8ff2c44e5d6edb1ff2b7046))
- *(deps)* Optionally use `parking_lot` for lock implementation ([#750](https://github.com/0x676e67/wreq/issues/750)) - ([da30d6b](https://github.com/0x676e67/wreq/commit/da30d6beef7182e507659417c4357751866cbdd7))
- *(deps)* Prepare for Boring 5 upgrade ([#735](https://github.com/0x676e67/wreq/issues/735)) - ([77cfc8d](https://github.com/0x676e67/wreq/commit/77cfc8dcb7d4aec9df9ed7c3656633a4ffcc407e))
- *(deps)* Update tokio-tungstenite requirement from 0.26.2 to 0.27.0 ([#721](https://github.com/0x676e67/wreq/issues/721)) - ([63f7a4b](https://github.com/0x676e67/wreq/commit/63f7a4b68881a2e453fdf9413082fac7e5d4021e))
- *(deps)* Update webpki-root-certs requirement from 0.26.0 to 1.0.0 ([#631](https://github.com/0x676e67/wreq/issues/631)) - ([acb44fe](https://github.com/0x676e67/wreq/commit/acb44fe8c78b98f3c54dab05ab68035a6d449515))
- *(deps)* Remove `typed-builder` dependency ([#620](https://github.com/0x676e67/wreq/issues/620)) - ([5e037ac](https://github.com/0x676e67/wreq/commit/5e037ac61cbadc98bb37b3d851d3401e78023fb7))
- *(deps)* Update libc requirement from 2.0.11 to 0.2.172 ([#611](https://github.com/0x676e67/wreq/issues/611)) - ([888ef8a](https://github.com/0x676e67/wreq/commit/888ef8a2b709c113d2dbeac3457d35f61436b741))
- *(deps)* Update async-compression requirement from 0.4.21 to 0.4.23 ([#606](https://github.com/0x676e67/wreq/issues/606)) - ([6dc0026](https://github.com/0x676e67/wreq/commit/6dc002668c72038b87d1bd5e3edae4b47cc2f125))
- *(deps)* Update boring2 requirement from 4.15.11 to 4.15.12 ([#607](https://github.com/0x676e67/wreq/issues/607)) - ([bfe8c12](https://github.com/0x676e67/wreq/commit/bfe8c1256eded7b68826993e91d9729074d699f6))
- *(deps)* Update brotli requirement from 7.0.0 to 8.0.0 ([#601](https://github.com/0x676e67/wreq/issues/601)) - ([86849dd](https://github.com/0x676e67/wreq/commit/86849dd73b5753a3bf0cbddfd613686d6013ab9a))
- *(deps)* Update socket2 requirement from 0.5.8 to 0.5.9 ([#599](https://github.com/0x676e67/wreq/issues/599)) - ([dec8352](https://github.com/0x676e67/wreq/commit/dec8352ca33a74314e7a671858763ced272bc12f))
- *(deps)* Update lru requirement from 0.13 to 0.14 ([#597](https://github.com/0x676e67/wreq/issues/597)) - ([e557749](https://github.com/0x676e67/wreq/commit/e557749d078d50cf2fddf59df094ed5ce591128d))
- *(feature)* Drop redundant `sync_wrapper` ([#817](https://github.com/0x676e67/wreq/issues/817)) - ([a737f56](https://github.com/0x676e67/wreq/commit/a737f56e3c398378726666851773242470cb40a7))
- *(feature)* Rename `websocket` feature to `ws` ([#816](https://github.com/0x676e67/wreq/issues/816)) - ([d15b2d5](https://github.com/0x676e67/wreq/commit/d15b2d530e37299dc9e77559f2c2289424a4799d))
- *(sync)* Remove optional `parking_lot` support - ([b109eb9](https://github.com/0x676e67/wreq/commit/b109eb99c424d92f9912509105b50a26f02bee36))
- Drop `full` feature ([#803](https://github.com/0x676e67/wreq/issues/803)) - ([12b4d64](https://github.com/0x676e67/wreq/commit/12b4d64eba7c2c5c34f89b1a10247814f01be095))
- Drop deprecated `macos-system-configuration` feature ([#775](https://github.com/0x676e67/wreq/issues/775)) - ([7caa4ad](https://github.com/0x676e67/wreq/commit/7caa4ad5327d437ece815fda99635f99f9cd062c))
- Cleanup deprecated feature - ([8d1632b](https://github.com/0x676e67/wreq/commit/8d1632b73e0994091136c7a60a2e801e65e9b440))

### Deps

- *(boring)* Basic support for LoongArch ([#622](https://github.com/0x676e67/wreq/issues/622)) - ([bcc53cf](https://github.com/0x676e67/wreq/commit/bcc53cf260e31605376bc72fb7acae53fb385a4b))
- Prune unnecessary dependencies ([#681](https://github.com/0x676e67/wreq/issues/681)) - ([d9aecea](https://github.com/0x676e67/wreq/commit/d9aecead61dccb481b8d39744ece30d66d1ea41f))

## New Contributors ❤️

* @incizzle made their first contribution in [#608](https://github.com/0x676e67/wreq/pull/608)

## [5.1.0](https://github.com/0x676e67/wreq/compare/v5.0.0..v5.1.0) - 2025-03-29

### Features

- *(cookie)* Optional enable of sending multiple cookies in `CookieStore` ([#578](https://github.com/0x676e67/wreq/issues/578)) - ([6678fbf](https://github.com/0x676e67/wreq/commit/6678fbfa22aa259a20fe1868bb41d94851765492))
- *(cookie)* Cookies feature optionally preserves order ([#573](https://github.com/0x676e67/wreq/issues/573)) - ([803852b](https://github.com/0x676e67/wreq/commit/803852b43e127f0c89aea2a81e75ad4d04c951bd))
- *(proxy)* Enhanced websocket level proxy options ([#569](https://github.com/0x676e67/wreq/issues/569)) - ([a6c9a75](https://github.com/0x676e67/wreq/commit/a6c9a75dd68f99095bbf70cb95d2955b89b2271b))
- *(request)* Optionally allow compression in request ([#581](https://github.com/0x676e67/wreq/issues/581)) - ([dc2c148](https://github.com/0x676e67/wreq/commit/dc2c1483dca066f4bc9b02f3504c5c86edd45438))
- *(x509)* Support for using a private key and X.509 certificate as a client certificate ([#588](https://github.com/0x676e67/wreq/issues/588)) - ([3fbcc89](https://github.com/0x676e67/wreq/commit/3fbcc89775fe0e65e5c5cfa86319350ab4cada7d))
- *(x509)* Auto detect and parse `DER`/`PEM` certificate formats ([#584](https://github.com/0x676e67/wreq/issues/584)) - ([3ab1681](https://github.com/0x676e67/wreq/commit/3ab168126ed4fe41c5dbe5e0bc56d2f87734d679))
- Expose `tls` and `websocket` modules ([#587](https://github.com/0x676e67/wreq/issues/587)) - ([a771463](https://github.com/0x676e67/wreq/commit/a771463508f66314f52a725bca6bb8de042843b7))

### Bug Fixes

- *(client)* Adapt sorting for duplicate headers such as cookies ([#576](https://github.com/0x676e67/wreq/issues/576)) - ([a786a85](https://github.com/0x676e67/wreq/commit/a786a8595079b1647c1d1a6ab571ffb199b11a5d))
- *(request)* Fix `try_clone` missing protocol extension ([#579](https://github.com/0x676e67/wreq/issues/579)) - ([0e9872d](https://github.com/0x676e67/wreq/commit/0e9872dd370a8a70d38139b30c14113495418b86))

### Documentation

- *(request)* Improve request header parameter docs ([#580](https://github.com/0x676e67/wreq/issues/580)) - ([f03c1c8](https://github.com/0x676e67/wreq/commit/f03c1c8d6aff7e2fba2aeb60a03e991f714e9662))
- *(response)* Link to `char::REPLACEMENT_CHARACTER` ([#586](https://github.com/0x676e67/wreq/issues/586)) - ([b0abcb6](https://github.com/0x676e67/wreq/commit/b0abcb636b5c5b86089cfbf1f39ebdc966da1e30))
- Update certificate store description ([#572](https://github.com/0x676e67/wreq/issues/572)) - ([f1b076f](https://github.com/0x676e67/wreq/commit/f1b076f8321987f9d4ece641b557261277128cbb))
- Improved emulation description ([#571](https://github.com/0x676e67/wreq/issues/571)) - ([5924815](https://github.com/0x676e67/wreq/commit/5924815a05b4512381815a2f4d66daf4e855f538))
- Update examples docs ([#570](https://github.com/0x676e67/wreq/issues/570)) - ([591e4b3](https://github.com/0x676e67/wreq/commit/591e4b3e1b63bc5911b6e1f64643c32c7d3475f0))

### Performance

- *(cookie)* Optimize the performance of cookies compression ([#574](https://github.com/0x676e67/wreq/issues/574)) - ([6c2280c](https://github.com/0x676e67/wreq/commit/6c2280c82a252f4de2289e74fc88a9d6058a6941))
- *(request)* Improve `json`/`form` request performance ([#583](https://github.com/0x676e67/wreq/issues/583)) - ([cce1fcf](https://github.com/0x676e67/wreq/commit/cce1fcfbad9b6f7d519b0c6f629087bded222ae4))

### Styling

- *(client)* Fmt import - ([f509c52](https://github.com/0x676e67/wreq/commit/f509c5298e4f1865f71a862e6882d420b9c06d24))
- *(client)* Fmt code - ([ca9bc96](https://github.com/0x676e67/wreq/commit/ca9bc96d85cfdd90e6f06c1b59b952a46946d98a))
- *(x509)* Fmt code - ([cc6fa5d](https://github.com/0x676e67/wreq/commit/cc6fa5d6bed622d569c50c5153d98e96664bac29))
- *(x509)* Format compatible code ([#589](https://github.com/0x676e67/wreq/issues/589)) - ([a12a414](https://github.com/0x676e67/wreq/commit/a12a414105433151a583a605b9e0a0767639143c))

### Testing

- *(badssl)* Dynamically update peer certificate SSL pinning test ([#582](https://github.com/0x676e67/wreq/issues/582)) - ([a87b95f](https://github.com/0x676e67/wreq/commit/a87b95fbe37318a5e0e3a0c3b2e90c39bde49654))

### Miscellaneous Tasks

- *(client)* Remove dead code - ([4de2978](https://github.com/0x676e67/wreq/commit/4de29785cd506fedb82ecfbb2355dcb966984d63))
- *(http)* Rename `ClientInner` to `ClientRef` - ([1d01390](https://github.com/0x676e67/wreq/commit/1d01390103b0e424dfacc211fcb9b56b0c848da6))
- *(tests)* Update client tests conditional ([#577](https://github.com/0x676e67/wreq/issues/577)) - ([684eb89](https://github.com/0x676e67/wreq/commit/684eb89a42febe7175c4f0fa5a2f2d8204514160))

### Build

- *(deps)* Upgrade dependencies ([#575](https://github.com/0x676e67/wreq/issues/575)) - ([cf6daf0](https://github.com/0x676e67/wreq/commit/cf6daf0662268f5f6d64bb06d4d8ea361cac46aa))


## [5.0.0](https://github.com/0x676e67/wreq/compare/v3.0.6..v5.0.0) - 2025-03-23

### Features

- *(client)* Add a straightforward method for SSL pinning setup ([#556](https://github.com/0x676e67/wreq/issues/556)) - ([071d5ed](https://github.com/0x676e67/wreq/commit/071d5ed8ded32e5f40b6d21d2cea39920ddbe355))
- *(client)* Ignore the requirement to configure tls in order ([#545](https://github.com/0x676e67/wreq/issues/545)) - ([213b0ac](https://github.com/0x676e67/wreq/commit/213b0ac73b0cace1cb70dee443de2de1bcc32b16))
- *(cookie)* Impl `into_inner` for `Cookie` ([#542](https://github.com/0x676e67/wreq/issues/542)) - ([1f09ed5](https://github.com/0x676e67/wreq/commit/1f09ed5f46bb105618855e7a22f61b0a61454489))
- *(cookie)* Impl `Display` for `Cookie` ([#541](https://github.com/0x676e67/wreq/issues/541)) - ([729669c](https://github.com/0x676e67/wreq/commit/729669cd23b87e8c303e7ae70c4bf60c9ee0f68c))
- *(cookie)* Impl `into_owned` for cookie ([#535](https://github.com/0x676e67/wreq/issues/535)) - ([04d11ad](https://github.com/0x676e67/wreq/commit/04d11ada3cfe618927bad83304a886c39e7053bb))
- *(error)* Added `Error::is_connection_reset()` - ([8a68b1a](https://github.com/0x676e67/wreq/commit/8a68b1a299b3f44108a475e5837d109c635fbf24))
- *(proxy)* Enhanced client proxy options ([#534](https://github.com/0x676e67/wreq/issues/534)) - ([4edbfef](https://github.com/0x676e67/wreq/commit/4edbfefadbfec1a797c179d3442a1a7b3345ec3f))
- *(proxy)* Enhanced request level proxy options ([#533](https://github.com/0x676e67/wreq/issues/533)) - ([a69ac1b](https://github.com/0x676e67/wreq/commit/a69ac1ba37d4828d5f409ac6124497d7a84af42b))
- *(ws)* Impl `from_bytes_unchecked` of `Utf8Bytes` ([#550](https://github.com/0x676e67/wreq/issues/550)) - ([0663aa5](https://github.com/0x676e67/wreq/commit/0663aa5e44d389d1b34c0ee6efd1d2136c774f57))
- Remove shortcut for quickly make requests ([#560](https://github.com/0x676e67/wreq/issues/560)) - ([cb43f23](https://github.com/0x676e67/wreq/commit/cb43f23f9885a04b595c1caa4eef6323b63845aa))

### Bug Fixes

- *(client)* Preserve TLS settings when update client ([#552](https://github.com/0x676e67/wreq/issues/552)) - ([6a2e3e6](https://github.com/0x676e67/wreq/commit/6a2e3e60a6ac92977681c4c43308be05989c5dfe))
- *(client)* Preserve TLS `RootCertStore` settings when update client ([#551](https://github.com/0x676e67/wreq/issues/551)) - ([ad72976](https://github.com/0x676e67/wreq/commit/ad7297660a753a97d614fd9bb657303b04c0eba5))
- *(client)* Preserve TLS verify settings when update client ([#546](https://github.com/0x676e67/wreq/issues/546)) - ([21ad6e8](https://github.com/0x676e67/wreq/commit/21ad6e8beeeced18e928c35c6fee856047944321))
- *(proxy)* Re-enable NO_PROXY envs on Windows ([#544](https://github.com/0x676e67/wreq/issues/544)) - ([f5eb6fe](https://github.com/0x676e67/wreq/commit/f5eb6fe28d167485ceec79afee25180e9b268314))

### Refactor

- *(client)* Rename max_retry_count to http2_max_retry_count - ([be29947](https://github.com/0x676e67/wreq/commit/be29947166db5c2ac7bcd3700f6cc50fcc9118dc))
- *(client)* Delete tls fine-tuning config ([#530](https://github.com/0x676e67/wreq/issues/530)) - ([d7a75e3](https://github.com/0x676e67/wreq/commit/d7a75e393aa8d48b570d15aa66ce600a2ac8691c))
- *(cookie)* Redesign cookie store API signature ([#538](https://github.com/0x676e67/wreq/issues/538)) - ([2968839](https://github.com/0x676e67/wreq/commit/2968839c37c01950fd2be037c7bec1d64381f1f9))
- *(cookie)* `max_age` type conversion fails to avoid panic ([#536](https://github.com/0x676e67/wreq/issues/536)) - ([ceb0bd5](https://github.com/0x676e67/wreq/commit/ceb0bd5d05886fb172a33da2c23f69078ed147a0))
- *(tls)* Simplify RootCertStore wrapper implementation ([#553](https://github.com/0x676e67/wreq/issues/553)) - ([b24bc40](https://github.com/0x676e67/wreq/commit/b24bc4060e84734b0fa99d35f111c5638ec1bdb7))
- Unified naming of historical legacy APIs - ([c7c6a0d](https://github.com/0x676e67/wreq/commit/c7c6a0db32445dda27b285e4c7a812f4ca236b39))
- Unified naming of historical legacy APIs ([#554](https://github.com/0x676e67/wreq/issues/554)) - ([9022641](https://github.com/0x676e67/wreq/commit/902264184d938d8b8cb138dbc28e8eca1e25891d))

### Documentation

- *(client)* Update emulation method documentation - ([5dd33ab](https://github.com/0x676e67/wreq/commit/5dd33aba02be7d6b0136a5d6e839d9974f1303d3))
- *(client)* Deleting outdated documents ([#532](https://github.com/0x676e67/wreq/issues/532)) - ([2cffe47](https://github.com/0x676e67/wreq/commit/2cffe471deca62c86ed18346cbd7b12caf2e0579))
- *(cookie)* Delete irrelevant library documents - ([6c44c38](https://github.com/0x676e67/wreq/commit/6c44c38f589057f3a64bb7152a34ca62630b7586))
- *(response)* Clarify in docs that `Response::content_length()` is not based on the `Content-Length` header ([#558](https://github.com/0x676e67/wreq/issues/558)) - ([5c174c4](https://github.com/0x676e67/wreq/commit/5c174c48b4ec09544de379c5254fc11e74d5bd7b))
- *(response)* Clarify that content_length() is not based on the Content-Length header in the docs - ([7257f34](https://github.com/0x676e67/wreq/commit/7257f34ca23c7cd0b9f0a1aa6e0da3507ad58956))
- Update library examples - ([62d6266](https://github.com/0x676e67/wreq/commit/62d6266f425e83ad0998d1b2f290cb56d44df93f))
- Update features description ([#540](https://github.com/0x676e67/wreq/issues/540)) - ([bd18719](https://github.com/0x676e67/wreq/commit/bd1871957df8304a0a55485cc7c2eb3e5add00bc))

### Performance

- *(client)* Fine-tune request performance and testing ([#566](https://github.com/0x676e67/wreq/issues/566)) - ([a07c233](https://github.com/0x676e67/wreq/commit/a07c2332cc751a98d48e0a8cf3fca958e19f09e3))
- *(http)* Inline hotspot method ([#528](https://github.com/0x676e67/wreq/issues/528)) - ([2038231](https://github.com/0x676e67/wreq/commit/20382318693de4e2aaa4b55c3943c5ad1bd2689c))

### Testing

- *(badssl)* Update ssl pinning test ([#557](https://github.com/0x676e67/wreq/issues/557)) - ([b883d7f](https://github.com/0x676e67/wreq/commit/b883d7fb9b7b6c6f1b5b48271bd4d5c7de9666d8))

### Miscellaneous Tasks

- *(emulation)* Impl `default` for EmulationProvider - ([b726363](https://github.com/0x676e67/wreq/commit/b7263637f23bac976a54fe644b96f89047217647))
- *(tls)* Simplified `IntoCertStore` macro impl ([#562](https://github.com/0x676e67/wreq/issues/562)) - ([5052342](https://github.com/0x676e67/wreq/commit/505234223f28dd749f10414e1fee9161119e1d98))
- *(tls)* Simplified `IntoCertCompressionAlgorithm` macro impl ([#561](https://github.com/0x676e67/wreq/issues/561)) - ([a7606d9](https://github.com/0x676e67/wreq/commit/a7606d9d50cc295dfbd5374a55c6841f790ae6c2))
- Update example documentation crate package name - ([363e98b](https://github.com/0x676e67/wreq/commit/363e98b6b97809f2a6802a131e884cb302430da8))
- Update apache license copyright - ([50d73a3](https://github.com/0x676e67/wreq/commit/50d73a35afd3c482538a23f34e125bfbd9be6f69))

### Build

- *(action)* Added compression features tests ([#564](https://github.com/0x676e67/wreq/issues/564)) - ([5767ce8](https://github.com/0x676e67/wreq/commit/5767ce81d59b5f1d0e2e702c2200dfd3713b4f0b))
- *(action)* Added features tests ([#563](https://github.com/0x676e67/wreq/issues/563)) - ([b8f7968](https://github.com/0x676e67/wreq/commit/b8f7968f0ed52d6fe6282ef189fe8f8514ba1071))
- *(action)* Added check semver action ([#559](https://github.com/0x676e67/wreq/issues/559)) - ([a58e989](https://github.com/0x676e67/wreq/commit/a58e989819fb29e89823ee764d26df2646a840e2))
- *(deps)* Pin `async-compression` to version `0.4.21` ([#567](https://github.com/0x676e67/wreq/issues/567)) - ([0be61d7](https://github.com/0x676e67/wreq/commit/0be61d7db8641170ca143220de348b1e423d8f83))
- *(deps)* Pin `tokio-tungstenite` to version `0.26.2` ([#565](https://github.com/0x676e67/wreq/issues/565)) - ([a5ee2a2](https://github.com/0x676e67/wreq/commit/a5ee2a2d99fcb1c8afab7a2636c7c657132744ed))
- *(deps)* Update hickory-resolver requirement from 0.24 to 0.25 ([#549](https://github.com/0x676e67/wreq/issues/549)) - ([f7de3f5](https://github.com/0x676e67/wreq/commit/f7de3f5ba54c9bbb4701138a69adeaa563c9b4c0))
- *(deps)* Update typed-builder requirement from 0.20.0 to 0.21.0 ([#548](https://github.com/0x676e67/wreq/issues/548)) - ([099c257](https://github.com/0x676e67/wreq/commit/099c257ef3d244a464633deb04ccca6cd4a87898))


## [3.0.6](https://github.com/0x676e67/wreq/compare/v3.0.5..v3.0.6) - 2025-03-10

### Features

- *(ws)* Improved WebSocket message creation ([#524](https://github.com/0x676e67/wreq/issues/524)) - ([508d869](https://github.com/0x676e67/wreq/commit/508d8695216a1ca28c91fe5d9e04cce745839a67))

### Testing

- *(zstd)* Test connection reuse with new zstd decompression ([#522](https://github.com/0x676e67/wreq/issues/522)) - ([a277f80](https://github.com/0x676e67/wreq/commit/a277f8036da135533efd55bd561941b992cfb1fa))


## [3.0.5](https://github.com/0x676e67/wreq/compare/v3.0.3..v3.0.5) - 2025-03-09

### Features

- *(tls)* Allow overriding AES encryption for TLS ECH ([#515](https://github.com/0x676e67/wreq/issues/515)) - ([0045e3d](https://github.com/0x676e67/wreq/commit/0045e3d105a1c38ffb1ceb1cdc15cb2d4265e9ac))

### Bug Fixes

- *(decoder)* Handle multi-frame zstd response body decompression ([#517](https://github.com/0x676e67/wreq/issues/517)) - ([bbc02ae](https://github.com/0x676e67/wreq/commit/bbc02ae0a837138054321bfcb8223a3fafd2e286))

### Miscellaneous Tasks

- *(connect)* Remove `ServiceBuilder` dead code ([#518](https://github.com/0x676e67/wreq/issues/518)) - ([8cf0dc4](https://github.com/0x676e67/wreq/commit/8cf0dc4034707e73205cc5849c473e2a6ca87201))
- Update docs - ([d077c3d](https://github.com/0x676e67/wreq/commit/d077c3d40b43441ddebd8d3049b4d9094b23ec3b))


## [3.0.3](https://github.com/0x676e67/wreq/compare/v3.0.1..v3.0.3) - 2025-03-07

### Bug Fixes

- *(decoder)* Fix conditional compilation of decompress features ([#507](https://github.com/0x676e67/wreq/issues/507)) - ([8ffa73b](https://github.com/0x676e67/wreq/commit/8ffa73bdd6a8aea1651f31f2a70c6ed727cd65f3))

### Styling

- Clippy fix example `set_root_cert_store` - ([9b3b49a](https://github.com/0x676e67/wreq/commit/9b3b49ac5172d09369b64a1b3b4cfe3550139fb8))

### Miscellaneous Tasks

- Remove pub(super) visibility from `method_has_defined_payload_semantics` - ([b689112](https://github.com/0x676e67/wreq/commit/b689112bdb1bd60798e264ba43b5d073009df0f1))

### Build

- *(deps)* Update async-compression requirement from 0.4.0 to 0.4.20 ([#505](https://github.com/0x676e67/wreq/issues/505)) - ([71562ce](https://github.com/0x676e67/wreq/commit/71562ce70b0418fbd0a516727bb6107f83585f89))
- *(deps)* Update bytes requirement from 1.0 to 1.10.1 ([#504](https://github.com/0x676e67/wreq/issues/504)) - ([c10f5e1](https://github.com/0x676e67/wreq/commit/c10f5e15c63660ac33413d6c929a11ac70302e53))


## [3.0.1-rc4](https://github.com/0x676e67/wreq/compare/v3.0.1-rc3..v3.0.1-rc4) - 2025-03-05

### Features

- *(cert)* Expose `RootCertStoreBuilder` as public API ([#494](https://github.com/0x676e67/wreq/issues/494)) - ([849558f](https://github.com/0x676e67/wreq/commit/849558f2607e7b23521193c74e794cc192decf76))

### Refactor

- *(client)* Simplify DNS resolver initialization in ClientBuilder ([#499](https://github.com/0x676e67/wreq/issues/499)) - ([1368d07](https://github.com/0x676e67/wreq/commit/1368d075121a9cb9d2f9ca9cb674264e84c5e4e5))
- *(client)* `pool_max_size` signature changed from `Into<Option<NonZeroUsize>>` to `usize` ([#498](https://github.com/0x676e67/wreq/issues/498)) - ([57223e2](https://github.com/0x676e67/wreq/commit/57223e2ed4996239b8cfa696c68f550104de9f65))

### Documentation

- *(emulation)* Improve emulation documentation - ([776f2db](https://github.com/0x676e67/wreq/commit/776f2dbd18fa5fb3f635dceb2d22e92af358405d))
- Update docs ([#496](https://github.com/0x676e67/wreq/issues/496)) - ([a4862e8](https://github.com/0x676e67/wreq/commit/a4862e870d002f71761863bae22ec81de2bc5f52))

### Performance

- *(clinet)* Reading `user-agent` to avoid full clone ([#495](https://github.com/0x676e67/wreq/issues/495)) - ([89fd750](https://github.com/0x676e67/wreq/commit/89fd750e8f239c0bb31cf8699d7d4a54440933c0))
- *(decoder)* Statically check compression headers ([#503](https://github.com/0x676e67/wreq/issues/503)) - ([c912d8d](https://github.com/0x676e67/wreq/commit/c912d8d428b6787f4203a06ff9d2fd7abc6fb3d2))

### Styling

- *(network)* Fmt code - ([5941b39](https://github.com/0x676e67/wreq/commit/5941b390b46de184ecb57160cd64d08a7ab708e0))

### Miscellaneous Tasks

- Revert `impl_debug` export - ([3fc3f69](https://github.com/0x676e67/wreq/commit/3fc3f697982cee4fc24e28e10cfba04ceeaf1773))


## [3.0.1-rc3](https://github.com/0x676e67/wreq/compare/v3.0.1-rc2..v3.0.1-rc3) - 2025-03-04

### Features

- *(cookie)* Abstract public cookie store trait ([#493](https://github.com/0x676e67/wreq/issues/493)) - ([a565884](https://github.com/0x676e67/wreq/commit/a5658847433928673964b79a7937b35dc4db6296))
- *(proxy)* Supports `http`/`https` proxy custom headers ([#490](https://github.com/0x676e67/wreq/issues/490)) - ([02fdc5b](https://github.com/0x676e67/wreq/commit/02fdc5bcd1b40d27538163279f4424a666957eef))

### Testing

- Update badssl test ([#487](https://github.com/0x676e67/wreq/issues/487)) - ([8831a9e](https://github.com/0x676e67/wreq/commit/8831a9e42d67dd5234955fc4594f8d3e564b04cc))

### Miscellaneous Tasks

- Replace `get_or_insert_with(Vec::new)` to `get_or_insert_default()` - ([2ca23a1](https://github.com/0x676e67/wreq/commit/2ca23a17068ef5c1b132029abcb25b47db029db7))

### Build

- `MSRV 1.85` / `edition 2024` ([#488](https://github.com/0x676e67/wreq/issues/488)) - ([f5bcc71](https://github.com/0x676e67/wreq/commit/f5bcc71d70a86e52a19596988c1ed08f71c12769))


## [3.0.1-rc2](https://github.com/0x676e67/wreq/compare/v3.0.1-rc1..v3.0.1-rc2) - 2025-03-03

### Refactor

- *(client)* Rename `as_mut` to `update` for clarity and consistency   ([#482](https://github.com/0x676e67/wreq/issues/482)) - ([e8137ec](https://github.com/0x676e67/wreq/commit/e8137ec6448e53124b58d5c7e4bdb7eb1d923bb7))

### Styling

- *(client)* Fmt code - ([897a373](https://github.com/0x676e67/wreq/commit/897a373b460ea3e0c8558e9d72843ef28578e61a))

### Testing

- Add client cloned test ([#485](https://github.com/0x676e67/wreq/issues/485)) - ([4a5419b](https://github.com/0x676e67/wreq/commit/4a5419b56d57a54b1cfde121fee9f41acb6c411f))
- Add client emulation update test ([#484](https://github.com/0x676e67/wreq/issues/484)) - ([f72648f](https://github.com/0x676e67/wreq/commit/f72648feafe1440dc1ae942b75421faf940fff76))
- Add client headers update test ([#483](https://github.com/0x676e67/wreq/issues/483)) - ([730fdaa](https://github.com/0x676e67/wreq/commit/730fdaa3b18c7e0d2e2c732a408677ba8c483854))

### Miscellaneous Tasks

- *(client)* Update docs - ([bbcdd1f](https://github.com/0x676e67/wreq/commit/bbcdd1f15843c63aa8fee47ac0507620fb9468e6))

### Build

- Fix docs build ([#486](https://github.com/0x676e67/wreq/issues/486)) - ([915c36b](https://github.com/0x676e67/wreq/commit/915c36bb4a666be3acd26a4416a39534e661419b))


## [3.0.1-rc1](https://github.com/0x676e67/wreq/compare/v2.0.3..v3.0.1-rc1) - 2025-03-03

### Features

- *(client)* Remove cross-origin redirect proxy support ([#477](https://github.com/0x676e67/wreq/issues/477)) - ([3a241ef](https://github.com/0x676e67/wreq/commit/3a241ef4b342b1bd46a8e4cd7ecbeb641d043b4f))
- *(client)* Added a remove cookie function ([#475](https://github.com/0x676e67/wreq/issues/475)) - ([7142963](https://github.com/0x676e67/wreq/commit/71429634012e03a710793591727cbf4bd5d8de28))
- *(client)* Remove `set_cookies_by_ref` ([#474](https://github.com/0x676e67/wreq/issues/474)) - ([56de727](https://github.com/0x676e67/wreq/commit/56de72716b1cd89f724f8720dc3fa2fb75ac0399))
- *(client)* Added a clear cookies function ([#472](https://github.com/0x676e67/wreq/issues/472)) - ([d934716](https://github.com/0x676e67/wreq/commit/d93471631440a28a0dfb63dad85f4acf3768cab2))
- *(client)* Adapt thread-safe update client configuration ([#404](https://github.com/0x676e67/wreq/issues/404)) - ([e6397d6](https://github.com/0x676e67/wreq/commit/e6397d68f216a86e75b46bb2f7b9345ecf58e08f))
- *(client)* Apply configuration sequentially ([#391](https://github.com/0x676e67/wreq/issues/391)) - ([775db82](https://github.com/0x676e67/wreq/commit/775db824653b162e4dfc6bb14c79b811206f79c2))
- *(imp)* Add `chrome 132`/`chrome 133` impersonate ([#423](https://github.com/0x676e67/wreq/issues/423)) - ([3430645](https://github.com/0x676e67/wreq/commit/34306457c0ba01f95e46b5b0bbe443a3abe3fb87))
- *(pool)* Connection pool distinguishes request versions ([#431](https://github.com/0x676e67/wreq/issues/431)) - ([22b0e92](https://github.com/0x676e67/wreq/commit/22b0e92835a786be030f405fd70ea311cecb6de4))
- *(proxy)* Add `socks4a` proxy protocol support ([#416](https://github.com/0x676e67/wreq/issues/416)) - ([1f98b6e](https://github.com/0x676e67/wreq/commit/1f98b6e2578ab55ff4fcfb86c66548a7161469a7))
- *(tls)* Encapsulate and simplify certificate loading ([#417](https://github.com/0x676e67/wreq/issues/417)) - ([a32207e](https://github.com/0x676e67/wreq/commit/a32207ef84057e042b69068fee2179b0a059cd51))
- *(tls)* Add ALPS use new endpoint extension ([#396](https://github.com/0x676e67/wreq/issues/396)) - ([20b988c](https://github.com/0x676e67/wreq/commit/20b988c04e4a8a334d702b74a54e46d149b9802a))
- *(websocket)* Added `read_buffer_size` optional config ([#457](https://github.com/0x676e67/wreq/issues/457)) - ([ccece59](https://github.com/0x676e67/wreq/commit/ccece597da6db3f085acf13718af93ea3acffab9))
- *(websocket)* Chain call wrapper `RequestBuilder` ([#432](https://github.com/0x676e67/wreq/issues/432)) - ([ea3dfe8](https://github.com/0x676e67/wreq/commit/ea3dfe88c7dbcf4b9f13a70ac29aa306f17fdf91))
- *(websocket)* Explicitly force the use of ws/wss protocol ([#383](https://github.com/0x676e67/wreq/issues/383)) - ([4fd10a9](https://github.com/0x676e67/wreq/commit/4fd10a951977580b74f60d5ede81833ae0f484cf))
- Removal of base url feature  ([#411](https://github.com/0x676e67/wreq/issues/411)) - ([16dac1d](https://github.com/0x676e67/wreq/commit/16dac1d122381d27ed3f5948766a1d9a13ca8d9d))
- Add optional clear method to `CookieStore` implementation ([#400](https://github.com/0x676e67/wreq/issues/400)) - ([a357c9e](https://github.com/0x676e67/wreq/commit/a357c9e1eed9c9d51fd10d3eb98109104928cef5))
- Serializing impersonate enums uses legacy naming conventions ([#385](https://github.com/0x676e67/wreq/issues/385)) - ([0e3ddb0](https://github.com/0x676e67/wreq/commit/0e3ddb06d3690661806d6f1dc8731e8d337ad4a0))
- Add `HTTP/2` support for `WebSocket` ([#373](https://github.com/0x676e67/wreq/issues/373)) - ([b46daa9](https://github.com/0x676e67/wreq/commit/b46daa90fd11e475b7b8238e1ab5d573b8a531b2))

### Bug Fixes

- *(deps)* Fix alps use new endpoint negotiation ([#464](https://github.com/0x676e67/wreq/issues/464)) - ([21c6751](https://github.com/0x676e67/wreq/commit/21c675123e1f117633d604290c94e5aa333ec4ab))
- *(proxy)* Fix `no_proxy` on Windows ([#470](https://github.com/0x676e67/wreq/issues/470)) - ([16ec933](https://github.com/0x676e67/wreq/commit/16ec933045a707a244eebc98edb17ae1314766a6))
- Ignore Content-Length for methods without payload semantics ([#429](https://github.com/0x676e67/wreq/issues/429)) - ([bd5420c](https://github.com/0x676e67/wreq/commit/bd5420c4d526f05b4430bd7e60f5f5df27fffa11))
- Ensure HTTP version negotiation for non-TLS requests ([#397](https://github.com/0x676e67/wreq/issues/397)) - ([dd14d49](https://github.com/0x676e67/wreq/commit/dd14d49a2d579f9d36a49f38c5d9de373901d492))

### Refactor

- *(client)* Simplify client reference handling by removing unnecessary operations ([#476](https://github.com/0x676e67/wreq/issues/476)) - ([529928b](https://github.com/0x676e67/wreq/commit/529928b4bae30b2ec4fadd2c91185f3417919ea8))
- *(client)* Refactor client `HTTP1`/`HTTP2` configuration API ([#371](https://github.com/0x676e67/wreq/issues/371)) - ([fac8d2d](https://github.com/0x676e67/wreq/commit/fac8d2d9cf6df102e101c4f8d9fda72bd2382935))
- *(tls)* Refactor TLS connector structure ([#421](https://github.com/0x676e67/wreq/issues/421)) - ([bdd3942](https://github.com/0x676e67/wreq/commit/bdd394210ffa26d0e2956c73606436685bc962da))
- *(websocket)* Refactor websocket implementation ([#380](https://github.com/0x676e67/wreq/issues/380)) - ([3b91be4](https://github.com/0x676e67/wreq/commit/3b91be4225aa060b43c00103af6fe5fa14a093dd))
- *(websocket)* Improve error handling, rename APIs, and update API signatures ([#372](https://github.com/0x676e67/wreq/issues/372)) - ([44ec8c6](https://github.com/0x676e67/wreq/commit/44ec8c600119c46112b182b268263aa272139b10))
- Move device fingerprinting to rquest-util maintenance ([#480](https://github.com/0x676e67/wreq/issues/480)) - ([5eb8684](https://github.com/0x676e67/wreq/commit/5eb868442018da9e7be15f9844392093ff5baa21))
- Reduce dependency on `futures-core` / `futures-util` ([#449](https://github.com/0x676e67/wreq/issues/449)) - ([5a4f2be](https://github.com/0x676e67/wreq/commit/5a4f2be065bb1edc3c1e39fe9fe2b8c993078260))
- Replace `HttpContext` with `EmulationProvider` for clarity and accuracy ([#436](https://github.com/0x676e67/wreq/issues/436)) - ([6a9d80a](https://github.com/0x676e67/wreq/commit/6a9d80a5cfa85b13b0a3b7bd08422ba0c563cf4a))
- Replace "impersonate" with "emulation" for clarity and accuracy ([#434](https://github.com/0x676e67/wreq/issues/434)) - ([e2bac75](https://github.com/0x676e67/wreq/commit/e2bac75805fdefd79c3cba32cadd65107060558b))
- Replace unsafe methods with safe methods for certificate handler ([#399](https://github.com/0x676e67/wreq/issues/399)) - ([bdf1fc5](https://github.com/0x676e67/wreq/commit/bdf1fc57d2150e7e471331abd1d745e7f786dbd7))
- Replace unsafe methods with safe methods in `ConnectConfiguration` ([#398](https://github.com/0x676e67/wreq/issues/398)) - ([dda0d42](https://github.com/0x676e67/wreq/commit/dda0d42388623c14838396624b2d56a8b572c2f7))
- Improve client API design and documentation ([#387](https://github.com/0x676e67/wreq/issues/387)) - ([7a63ba6](https://github.com/0x676e67/wreq/commit/7a63ba6e10734b233bbcce87c42a4978fccb7b25))
- Rename method to accept_key for clarity - ([c32dadd](https://github.com/0x676e67/wreq/commit/c32daddb394d5b35009fc445c1e0f247a5c48ba0))

### Documentation

- *(client)* Update client `cloned` method documentation ([#409](https://github.com/0x676e67/wreq/issues/409)) - ([7d10ce6](https://github.com/0x676e67/wreq/commit/7d10ce6be0b26d7b99f24a720e171f84c8b9e41c))
- Added backport reference docs ([#382](https://github.com/0x676e67/wreq/issues/382)) - ([7f57bd5](https://github.com/0x676e67/wreq/commit/7f57bd5876020cb827c2ac3161e4ef080e96718d))

### Performance

- *(connect)* Delay connector layer initialization to improve performance ([#408](https://github.com/0x676e67/wreq/issues/408)) - ([4903458](https://github.com/0x676e67/wreq/commit/4903458b81b161aac51ded38a562f139e08d94c9))
- *(connector)* Optimize performance of switching TLS connector ([#406](https://github.com/0x676e67/wreq/issues/406)) - ([26f58e4](https://github.com/0x676e67/wreq/commit/26f58e4e39b1d9d0eb6525862a5ff146fff4ef5c))
- *(socks)* Socks connection process DNS uses non-blocking query ([#420](https://github.com/0x676e67/wreq/issues/420)) - ([0d40c75](https://github.com/0x676e67/wreq/commit/0d40c75b1edc117fa81431256ca7f6510618ea43))
- Always inline `into_tungstenite` ([#381](https://github.com/0x676e67/wreq/issues/381)) - ([b5e0b9f](https://github.com/0x676e67/wreq/commit/b5e0b9f0263248669940c702868c5afcdc01cc76))

### Styling

- Fmt code - ([e3ac7a7](https://github.com/0x676e67/wreq/commit/e3ac7a76ccdb98a3b143607f8d3f8f7293421b4e))

### Testing

- *(upgrade)* Add http2 upgrade test ([#384](https://github.com/0x676e67/wreq/issues/384)) - ([0724836](https://github.com/0x676e67/wreq/commit/0724836dbfae85bf118f4caf4de19ae3d878b60e))
- Add unit test for cookie getter and setter functionality ([#451](https://github.com/0x676e67/wreq/issues/451)) - ([b71032e](https://github.com/0x676e67/wreq/commit/b71032e0229aa86b737426b643fabfaf549a854b))
- Serialize tests that read/write the same environment variable ([#443](https://github.com/0x676e67/wreq/issues/443)) - ([b7560f9](https://github.com/0x676e67/wreq/commit/b7560f97998e4221472c32688ab7bea5df61edb6))

### Miscellaneous Tasks

- *(client)* Delete unnecessary clone - ([9793bcc](https://github.com/0x676e67/wreq/commit/9793bccbb2f4d6d45dfc90ec028222cdf065f29c))
- *(client)* Rename client builder http2 timer name from `timer` to `http2_timer` ([#407](https://github.com/0x676e67/wreq/issues/407)) - ([e06d9ce](https://github.com/0x676e67/wreq/commit/e06d9ce8dd4f9f1a5f89c0ff3372869275f526b5))
- *(connect)* Delete duplicate tls info acquisition logic - ([4b7877a](https://github.com/0x676e67/wreq/commit/4b7877a3805afb071931358e0a0f69c42e8b05c0))
- *(connect)* Delete connector unnecessary keepalive field - ([08b5904](https://github.com/0x676e67/wreq/commit/08b5904ffb0374f6c327442a314615e6893b6c63))
- *(example)* Update websocket example - ([2479972](https://github.com/0x676e67/wreq/commit/24799723f580badf92e81b3e972ad8cc2b0995f1))
- *(tls)* Move `conf` to `client/conf` module - ([988e679](https://github.com/0x676e67/wreq/commit/988e67949ca9162e6449d41700e5bbbccdb84d2d))
- *(tls)* Move `TlsConfig` to conf module - ([ffd1673](https://github.com/0x676e67/wreq/commit/ffd1673e3afa379086bc04b7a744e8733512388b))
- *(websocket)* Simplify error handling and improve code readability ([#418](https://github.com/0x676e67/wreq/issues/418)) - ([60fa74d](https://github.com/0x676e67/wreq/commit/60fa74dc0abba1862d23adc4965152b1896eb3e4))
- *(websocket)* Fmt code - ([a313ba0](https://github.com/0x676e67/wreq/commit/a313ba0f2707148e023f0126cc895788e3d42bfe))
- *(websocket)* Improved version protocol handler - ([81a0183](https://github.com/0x676e67/wreq/commit/81a0183b14dbe9596c6eb4466656247d92563e62))
- Update examples - ([7cc6b1e](https://github.com/0x676e67/wreq/commit/7cc6b1e5b3a836bcf0e33f9994bb5a162ed76ad2))
- Add Crates.io MSRV - ([cc8cc28](https://github.com/0x676e67/wreq/commit/cc8cc284e7e7b976622a47271b273fa03a33a82b))
- Update the compilation guide ([#466](https://github.com/0x676e67/wreq/issues/466)) - ([5ad4de9](https://github.com/0x676e67/wreq/commit/5ad4de96c5938c1d7c8ea399495b1f377ecf8f66))
- Update compilation-guide ([#456](https://github.com/0x676e67/wreq/issues/456)) - ([723e0c1](https://github.com/0x676e67/wreq/commit/723e0c16d6ac923b8cc51312b2c2424366c0d915))
- Merge v2 branch - ([8180cbc](https://github.com/0x676e67/wreq/commit/8180cbcc4f60d3ab6916ad07df8f1354e230c39f))
- Improve Debug implementation ([#422](https://github.com/0x676e67/wreq/issues/422)) - ([566a33b](https://github.com/0x676e67/wreq/commit/566a33b3102b546f7f7c36161f4f98ae78bf2cb7))
- Fmt code - ([8b3c8f6](https://github.com/0x676e67/wreq/commit/8b3c8f6b1f5e19400ae33fdce85e3169d98c80ba))
- Simplified error qualifier types ([#412](https://github.com/0x676e67/wreq/issues/412)) - ([35b4347](https://github.com/0x676e67/wreq/commit/35b4347a35453b531f8339a9efe62b80a0ecd164))
- Rename `Proxies` internal fields - ([dfe4a00](https://github.com/0x676e67/wreq/commit/dfe4a00c505dcd7ec5802b51dd685f25e6559831))
- Update docs - ([6eb42e8](https://github.com/0x676e67/wreq/commit/6eb42e83452aab5d7921c56d7c1120cad676d805))
- Move `http1`/`http2` config to `conf` mod - ([592038f](https://github.com/0x676e67/wreq/commit/592038ff1468ad0a59aff1057410c6cffc8d6e04))
- Update client docs - ([6a35a0a](https://github.com/0x676e67/wreq/commit/6a35a0aa8ea2ccd4483b160ee1a19f97b539c7c8))
- Fix `AlpnProtos` non upper case globals warning - ([265d938](https://github.com/0x676e67/wreq/commit/265d9388ae524fbed133136f114835f5175b9bd0))
- Fix non upper case globals name - ([af02660](https://github.com/0x676e67/wreq/commit/af02660acffa86d48f0246d75de3e291869e86f6))
- Remove dead code - ([00e939a](https://github.com/0x676e67/wreq/commit/00e939ac1a68950131713575d3eae60d1a1b621c))
- Fmt code - ([096eef0](https://github.com/0x676e67/wreq/commit/096eef07bea970ef4fff57073e456c8269b992a6))
- Fmt imports ([#388](https://github.com/0x676e67/wreq/issues/388)) - ([d73d1ac](https://github.com/0x676e67/wreq/commit/d73d1ac0dde1faeda4186aa17051849067e48c63))
- Fmt code - ([05a9d40](https://github.com/0x676e67/wreq/commit/05a9d406b6bf2beb8066994fcc7269a01f900183))
- Fmt code - ([ff3ad03](https://github.com/0x676e67/wreq/commit/ff3ad037e5ad4ca83d1928631a9d88d754ef1cb1))
- Clippy fix - ([895db54](https://github.com/0x676e67/wreq/commit/895db54492677791693f760b6498d4b1eb9b619b))
- Update websocket examples - ([4eefefd](https://github.com/0x676e67/wreq/commit/4eefefd464d4d0580651fdbe38c832d3f53b1e59))
- Improved WebSocket protocols handler ([#370](https://github.com/0x676e67/wreq/issues/370)) - ([2abe066](https://github.com/0x676e67/wreq/commit/2abe06620c5de829db87ce8e7589d9864aa6d2ec))

### Build

- *(deps)* Update windows-registry requirement from 0.4.0 to 0.5.0 ([#471](https://github.com/0x676e67/wreq/issues/471)) - ([288e33a](https://github.com/0x676e67/wreq/commit/288e33aac4cbf0b3d6b51df38eb88952778eb447))
- *(deps)* Update boring requirement from 4.15.7 to 4.15.8 ([#468](https://github.com/0x676e67/wreq/issues/468)) - ([3488f17](https://github.com/0x676e67/wreq/commit/3488f17e9019735af1ec934027c1ec7c8bd28780))
- *(deps)* Update boring requirement from 4.15.5 to 4.15.6 - ([04659bb](https://github.com/0x676e67/wreq/commit/04659bbae0f4ded2e4a0f45f69e69c23da2f7e8d))
- *(deps)* Update boring requirement from 4.15.3 to 4.15.5 ([#437](https://github.com/0x676e67/wreq/issues/437)) - ([b172177](https://github.com/0x676e67/wreq/commit/b1721771a8f1cfa5af7aa9006484b9bfd1c2fff2))
- *(deps)* Update boring requirement from 4.15.2 to 4.15.3 ([#425](https://github.com/0x676e67/wreq/issues/425)) - ([aff379e](https://github.com/0x676e67/wreq/commit/aff379e045dc1c8bda0eeec9d091c08e9f5db86b))
- *(deps)* Apple platform dependencies are minimized as much as possible ([#414](https://github.com/0x676e67/wreq/issues/414)) - ([858d911](https://github.com/0x676e67/wreq/commit/858d91196299e9a8f2851981d50b5421b530b580))
- *(deps)* MacOS platform dependency is minimized ([#413](https://github.com/0x676e67/wreq/issues/413)) - ([f85c7ee](https://github.com/0x676e67/wreq/commit/f85c7ee337a74ef2686a0cc01870cc05eee031fc))
- *(deps)* Update brotli requirement from 6.0.0 to 7.0.0 ([#401](https://github.com/0x676e67/wreq/issues/401)) - ([50614a7](https://github.com/0x676e67/wreq/commit/50614a74a02991124cf0a20ba09de993b79e1223))
- *(deps)* Update lru requirement from 0.12 to 0.13 ([#393](https://github.com/0x676e67/wreq/issues/393)) - ([b3cda7d](https://github.com/0x676e67/wreq/commit/b3cda7d7f9efd9b7c35a5cd0c5a8a8588bb54897))
- *(feature)* `apple-bindable-device` rename to `apple-network-device-binding` ([#426](https://github.com/0x676e67/wreq/issues/426)) - ([05a1adb](https://github.com/0x676e67/wreq/commit/05a1adb626a0614fd13a04fbeb7ae3d5304e4d8b))
- Fix no default feature build - ([8ed417d](https://github.com/0x676e67/wreq/commit/8ed417df8fbbb14ec9f319219d6ca750200bd192))
- Visualize macro conditional compilation ([#415](https://github.com/0x676e67/wreq/issues/415)) - ([01f1387](https://github.com/0x676e67/wreq/commit/01f138738785dd1391a06d1ff015ea7eacc727c1))
- Update compilation guide ([#395](https://github.com/0x676e67/wreq/issues/395)) - ([96c75a4](https://github.com/0x676e67/wreq/commit/96c75a4be224d2be0275d101d43eb219489d7494))

### Deps

- *(ipnet)* Bump version to v2.11.0 ([#390](https://github.com/0x676e67/wreq/issues/390)) - ([2022b25](https://github.com/0x676e67/wreq/commit/2022b256d1d88dd991a3ed48f7c4678eb0f60f7c))
- *(tokio)* Remove unused `rt` feature ([#389](https://github.com/0x676e67/wreq/issues/389)) - ([545e245](https://github.com/0x676e67/wreq/commit/545e2456db7353b2909c85d9b3186dbe6d8100e2))

### Workflow

- Update workflows check - ([321fba2](https://github.com/0x676e67/wreq/commit/321fba2939253f51637b5b18dd1dfc9990dc0d2d))

## New Contributors ❤️

* @tahmid-23 made their first contribution in [#423](https://github.com/0x676e67/wreq/pull/423)

## [2.0.3](https://github.com/0x676e67/wreq/compare/v2.0.2..v2.0.3) - 2025-01-25

### Documentation

- Enhance documentation for `ImpersonateBuilder` methods ([#367](https://github.com/0x676e67/wreq/issues/367)) - ([d0dd33f](https://github.com/0x676e67/wreq/commit/d0dd33f22325b16138d743b03a39674daf8d89c8))

### Miscellaneous Tasks

- Update examples ([#368](https://github.com/0x676e67/wreq/issues/368)) - ([477e864](https://github.com/0x676e67/wreq/commit/477e864673d5e684070b54f44b48896760a05ef5))


## [2.0.2](https://github.com/0x676e67/wreq/compare/v2.0.1..v2.0.2) - 2025-01-25

### Features

- Add implementations for `IntoCertCompressionAlgorithm` ([#363](https://github.com/0x676e67/wreq/issues/363)) - ([3e09a3f](https://github.com/0x676e67/wreq/commit/3e09a3f5fbea1f0a400ab3eaf9ca9832c4d595a4))
- Expose `ClientMut` as public API ([#362](https://github.com/0x676e67/wreq/issues/362)) - ([455cf51](https://github.com/0x676e67/wreq/commit/455cf51ba37c10a57f00ad6310f87aae8d3f2af3))

### Refactor

- Simplify `IntoStreamDependency` implementations using macros ([#364](https://github.com/0x676e67/wreq/issues/364)) - ([9322f05](https://github.com/0x676e67/wreq/commit/9322f0594d0b1cf74bef110bdd113c7267ae1707))

### Miscellaneous Tasks

- Remove unnecessary type conversions - ([9d9bb4f](https://github.com/0x676e67/wreq/commit/9d9bb4fce39f3f6c7b6cbf24e06041a714ec1898))


## [2.0.1](https://github.com/0x676e67/wreq/compare/v2.0.0..v2.0.1) - 2025-01-24

### Features

- Implement `IntoStreamDependency` for tuple and `StreamDependency` ([#359](https://github.com/0x676e67/wreq/issues/359)) - ([d7724f7](https://github.com/0x676e67/wreq/commit/d7724f753e4375a68603ee781be0f010bb329de9))

### Documentation

- Update performance information - ([2cb8a46](https://github.com/0x676e67/wreq/commit/2cb8a4689422c8cddf51f09620d699f56e9d8111))

### Miscellaneous Tasks

- Update owner ([#358](https://github.com/0x676e67/wreq/issues/358)) - ([4ee1438](https://github.com/0x676e67/wreq/commit/4ee143824e5726a8bfaf1bcec14c2d59802ad71d))


## [2.0.0](https://github.com/0x676e67/wreq/compare/v2.0.0-rc.1..v2.0.0) - 2025-01-23

### Testing

- *(badssl)* Update cipher list - ([6b01366](https://github.com/0x676e67/wreq/commit/6b0136632b5241fad5fcb9620c54eac98f237ee9))

### Miscellaneous Tasks

- *(tls)* Load and wrap the certificate into `RootCertStore` ([#356](https://github.com/0x676e67/wreq/issues/356)) - ([adddada](https://github.com/0x676e67/wreq/commit/adddada9037b09ccb38a6eeea67f7adac328a38c))
- *(tls)* Move `tls/ext/cert` to `tls/cert` ([#355](https://github.com/0x676e67/wreq/issues/355)) - ([eae2d93](https://github.com/0x676e67/wreq/commit/eae2d9364063ab5585b34e137eedb90fb5da18dd))
- Move macros to lib mod ([#354](https://github.com/0x676e67/wreq/issues/354)) - ([6209589](https://github.com/0x676e67/wreq/commit/6209589bdd23cf38227745100c43d744f0c030b8))


## [2.0.0-rc.1](https://github.com/0x676e67/wreq/compare/v1.5.0..v2.0.0-rc.1) - 2025-01-22

### Features

- *(mimic)* Added possibility to choose Client and OS to impersonate ([#290](https://github.com/0x676e67/wreq/issues/290)) - ([63cb5c5](https://github.com/0x676e67/wreq/commit/63cb5c53a735f172114afcab6c816762faedd934))
- Rename `RootCertsStore` to `RootCertStore` ([#353](https://github.com/0x676e67/wreq/issues/353)) - ([152142f](https://github.com/0x676e67/wreq/commit/152142f00caf25b6d9c198155f417a84a6eead90))
- `Impersonate`/`ImpersonateOS` impl serde ([#352](https://github.com/0x676e67/wreq/issues/352)) - ([98c61c8](https://github.com/0x676e67/wreq/commit/98c61c885478f1d0d1f81ae1f9cff75bbbe0e95e))
- Add tests for `3DES` and `DH2048` cipher support ([#351](https://github.com/0x676e67/wreq/issues/351)) - ([bd73ddc](https://github.com/0x676e67/wreq/commit/bd73ddcb58bcfb936297cd338c8be589d2ce8c95))
- Remove impersonate from str feature ([#350](https://github.com/0x676e67/wreq/issues/350)) - ([96387ec](https://github.com/0x676e67/wreq/commit/96387ec22c009883f1486e3c09586cbbc7f94477))
- Add `read_timeout` option with override support in Request ([#334](https://github.com/0x676e67/wreq/issues/334)) - ([5d115a5](https://github.com/0x676e67/wreq/commit/5d115a5b5145213d3ec9f8408d88609aa43bf00a))
- Disable boring module exports - ([bb63196](https://github.com/0x676e67/wreq/commit/bb631960f9326a1c60e3300fd7f2425af1faef4b))
- Disable boring module exports ([#319](https://github.com/0x676e67/wreq/issues/319)) - ([7d30324](https://github.com/0x676e67/wreq/commit/7d3032433b561c0452c7b22a6fc5d5ba2ca37e84))
- Remove internal headers cache ([#318](https://github.com/0x676e67/wreq/issues/318)) - ([846ad15](https://github.com/0x676e67/wreq/commit/846ad15348c5a7767a3c3c6d971a0a6e430b24e6))
- Send `json` to avoid repeated query of `CONTENT_TYPE` ([#311](https://github.com/0x676e67/wreq/issues/311)) - ([bd2c519](https://github.com/0x676e67/wreq/commit/bd2c519156c66482ddd34b8aa4bf50fd36d3a213))

### Bug Fixes

- *(network)* Fix `NetworkScheme` debug format ([#332](https://github.com/0x676e67/wreq/issues/332)) - ([d0df934](https://github.com/0x676e67/wreq/commit/d0df93457dd100e75ffbf4fb8b61581cd24d79f6))

### Refactor

- Refactor client and impersonate configurations ([#321](https://github.com/0x676e67/wreq/issues/321)) - ([513f196](https://github.com/0x676e67/wreq/commit/513f1962503c32cdfeb748780cca26d3965be840))
- Simplify client internal settings ([#320](https://github.com/0x676e67/wreq/issues/320)) - ([b7763cf](https://github.com/0x676e67/wreq/commit/b7763cf75e01b119cf96cd8cc02bb52888295052))

### Documentation

- *(websocket)* Update docs - ([5028926](https://github.com/0x676e67/wreq/commit/5028926e889c38ac72c36e1c4cad79926efc07cb))
- Update network scheme docs - ([2ae744c](https://github.com/0x676e67/wreq/commit/2ae744cb185c2fbb512b72ac1d607c4be11408b1))
- Update `Client` docs - ([8af9f1a](https://github.com/0x676e67/wreq/commit/8af9f1ad4e07ca62f9ea1bbf2c9e54d82869da0a))

### Performance

- Improve network scheme to avoid unnecessary clone ([#333](https://github.com/0x676e67/wreq/issues/333)) - ([a1cb889](https://github.com/0x676e67/wreq/commit/a1cb88944ea6d537349f4d5d3af50f00bb6beaa6))

### Styling

- Destructive updates, standard naming style ([#315](https://github.com/0x676e67/wreq/issues/315)) - ([247a26f](https://github.com/0x676e67/wreq/commit/247a26f1b883f4ebe95e4df1815e44472387b317))
- Format code style - ([bd1a837](https://github.com/0x676e67/wreq/commit/bd1a83742e35a88e83c1e7d05f8b74080e67025d))
- Format code style ([#314](https://github.com/0x676e67/wreq/issues/314)) - ([509977f](https://github.com/0x676e67/wreq/commit/509977f22846d8f22ad0b9588dbb1f4272121143))

### Miscellaneous Tasks

- *(http)* Fmt code - ([d66b156](https://github.com/0x676e67/wreq/commit/d66b156a2a21d29c4d4f1c02cd04fa8f44feb72c))
- *(rewin)* Inline hotspot code - ([23cc53b](https://github.com/0x676e67/wreq/commit/23cc53b04f1825d0a729aeedd9dc93bcaebe0561))
- *(rt)* Inline hotspot code - ([8cd9199](https://github.com/0x676e67/wreq/commit/8cd9199ea680c59bcbc4681cec8e8a962b37e37f))
- Optional enable http2 tracing ([#335](https://github.com/0x676e67/wreq/issues/335)) - ([83918e1](https://github.com/0x676e67/wreq/commit/83918e1dcc1922a1989b7a5f0070081b0efe3c49))
- Fmt code - ([2feee9c](https://github.com/0x676e67/wreq/commit/2feee9c1da1004530f563a30bfd6e43eb88bd7c0))
- Simplify dependency version settings - ([f4f1e76](https://github.com/0x676e67/wreq/commit/f4f1e761166887b12cc192a22c29d685eb4046eb))
- Update examples - ([dece4f0](https://github.com/0x676e67/wreq/commit/dece4f093c5842b5387f0ab2da9aa2bff27db699))
- Format code - ([85b6795](https://github.com/0x676e67/wreq/commit/85b67951cee90ad3a98a9fceafd5382728c3a98f))
- Fmt code - ([269d11d](https://github.com/0x676e67/wreq/commit/269d11dfe3356ac97ed73d31f4690417ad3f3a65))

### Deps

- *(boring2)* Pin 4.13.0 version ([#331](https://github.com/0x676e67/wreq/issues/331)) - ([9272524](https://github.com/0x676e67/wreq/commit/9272524fc73e6a32a682e00bec39ff1474ed1703))
- *(hyper2)* Pin 1.5.0 version ([#330](https://github.com/0x676e67/wreq/issues/330)) - ([a638cd3](https://github.com/0x676e67/wreq/commit/a638cd3a2c248f9bb3eb39f5a077da1b2610e7d9))
- *(tower)* Pin version v0.5.2 - ([0973fef](https://github.com/0x676e67/wreq/commit/0973fefe13bd2d8656a0d5ca66bba8f398eed0f9))
- *(tower-layer)* Remove unused deps ([#322](https://github.com/0x676e67/wreq/issues/322)) - ([e446b61](https://github.com/0x676e67/wreq/commit/e446b61015076209c8b882bb01b2d92eda54cc2e))

### Workflows

- *(linux)* Remove unused deps install - ([4fe26e8](https://github.com/0x676e67/wreq/commit/4fe26e8d7fcbf3dcbabae77d51f4ca37be15573e))
- Add `rc` version check - ([708e77b](https://github.com/0x676e67/wreq/commit/708e77b697b546bb59b8b777b51a65dc88c9da24))

## New Contributors ❤️

* @bkn9hs made their first contribution in [#328](https://github.com/0x676e67/wreq/pull/328)
* @UwUDev made their first contribution in [#290](https://github.com/0x676e67/wreq/pull/290)

## [1.5.0](https://github.com/0x676e67/wreq/compare/v1.3.6..v1.5.0) - 2025-01-11

### Features

- *(client)* Add chain settings of client - ([42b08a1](https://github.com/0x676e67/wreq/commit/42b08a15c669573b6e955967e9218b20ee869960))
- *(client)* Optional cross-origin redirect proxy authentication ([#304](https://github.com/0x676e67/wreq/issues/304)) - ([fcdac5d](https://github.com/0x676e67/wreq/commit/fcdac5d643e65e53597a9d7de6a21bffddb6032c))
- *(client)* Expose default headers as public API ([#296](https://github.com/0x676e67/wreq/issues/296)) - ([00e4199](https://github.com/0x676e67/wreq/commit/00e419908cc16376015be20ffc426a57ec327b40))
- *(multipart)* Expose a Form::into_stream() method on async multipart forms ([#303](https://github.com/0x676e67/wreq/issues/303)) - ([f46563f](https://github.com/0x676e67/wreq/commit/f46563f294239bd6924ca4d01ee9c3a07df8a515))
- *(proxy)* Remove system proxy cache ([#309](https://github.com/0x676e67/wreq/issues/309)) - ([7992c93](https://github.com/0x676e67/wreq/commit/7992c9321979d2f61bc96bbb54a84248a1bb566b))
- *(tls)* Optional disable SSL renegotiation ([#306](https://github.com/0x676e67/wreq/issues/306)) - ([c9c0dd3](https://github.com/0x676e67/wreq/commit/c9c0dd301301003e206ff9f3230532b879e2c994))

### Bug Fixes

- Fix `Request` `try_clone` missing variables ([#301](https://github.com/0x676e67/wreq/issues/301)) - ([ca1c0fa](https://github.com/0x676e67/wreq/commit/ca1c0fa19c8d15b153e5e021f851e73c1489f23f))

### Refactor

- *(websocket)* Change parameters to `Cow` types for improved flexibility ([#298](https://github.com/0x676e67/wreq/issues/298)) - ([aff5af9](https://github.com/0x676e67/wreq/commit/aff5af9a6ab7e64269d7b113fe42b1c40325282f))
- Rename mod `scheme` with `network` - ([dceb375](https://github.com/0x676e67/wreq/commit/dceb37573b65ac172d367b8a5bcd3dd891a34431))

### Documentation

- *(tls)* Update docs - ([f7b564b](https://github.com/0x676e67/wreq/commit/f7b564b4ed115a67a3db5c260a53f93bf27bcb48))

### Performance

- *(pool)* Reduce lock scope to decrease contention ([#308](https://github.com/0x676e67/wreq/issues/308)) - ([6b0c27c](https://github.com/0x676e67/wreq/commit/6b0c27ce0b6d6bb123dde3fc114496b37ad3536f))

### Miscellaneous Tasks

- *(websocket)* Simplify URL scheme matching and error handling logic ([#302](https://github.com/0x676e67/wreq/issues/302)) - ([901b397](https://github.com/0x676e67/wreq/commit/901b397c87dfffaf80e250492d6c3b73022066f4))
- *(websocket)* Remove deprecated function ([#297](https://github.com/0x676e67/wreq/issues/297)) - ([427edf6](https://github.com/0x676e67/wreq/commit/427edf6e5dbaa0969239bf6073d4c5a4d56baf7a))
- Annotating default values ​​improves maintainability - ([a043290](https://github.com/0x676e67/wreq/commit/a043290c1e925a002cbbf4c6d2848a6e3073a909))
- Update websocket bad url handler - ([38eee48](https://github.com/0x676e67/wreq/commit/38eee48b0948c95cd1e3f24eb66284f787545ad0))
- Add `#[inline]` to `cookie_store_mut` - ([6fc11c5](https://github.com/0x676e67/wreq/commit/6fc11c5f4ad81ded8d37cff685e79476b603a888))
- Simplify template macro usage for platform-specific config ([#299](https://github.com/0x676e67/wreq/issues/299)) - ([675f198](https://github.com/0x676e67/wreq/commit/675f1985acf54eb27834393e80e3b0fa2c170aca))

### Build

- *(deps)* Update windows-registry requirement from 0.3.0 to 0.4.0 ([#295](https://github.com/0x676e67/wreq/issues/295)) - ([5a6fab4](https://github.com/0x676e67/wreq/commit/5a6fab4f3a50765afc155f1641cd2558af5c8693))
- *(deps)* Update env_logger requirement from 0.10.0 to 0.11.6 ([#294](https://github.com/0x676e67/wreq/issues/294)) - ([a483462](https://github.com/0x676e67/wreq/commit/a483462cd97e6ebf6a6df932b39c44578b48bfb8))
- Fix conditional compilation ([#307](https://github.com/0x676e67/wreq/issues/307)) - ([358a6ec](https://github.com/0x676e67/wreq/commit/358a6ecec2e59bb91ac962ffe7423041b1cb5ce4))


## [1.3.6](https://github.com/0x676e67/wreq/compare/v1.3.5..v1.3.6) - 2025-01-08

### Features

- *(websocket)* Add `with_builder` method to modify request builder before sending ([#288](https://github.com/0x676e67/wreq/issues/288)) - ([ff9e9f2](https://github.com/0x676e67/wreq/commit/ff9e9f2cb5f1817c6b0187aaa6095a87e386a3d2))
- Support `Apple` devices to bind device interface ([#293](https://github.com/0x676e67/wreq/issues/293)) - ([a71a460](https://github.com/0x676e67/wreq/commit/a71a46065b4f96200decc47891333ce699631b3f))

### Bug Fixes

- *(test)* Resolve test failures due to invalid upstream certificate site - ([1897e3a](https://github.com/0x676e67/wreq/commit/1897e3aa51b38f032bf246f57e04df3e3aa5f434))

### Performance

- *(pool)* Reduce `Dst` cloning overhead with `Arc` for `PoolKey` ([#289](https://github.com/0x676e67/wreq/issues/289)) - ([1946826](https://github.com/0x676e67/wreq/commit/194682691d448d1196cf37a34b3e89a3a4af76e9))

### Testing

- *(connector-layer)* Sync upstream connector layers tests ([#285](https://github.com/0x676e67/wreq/issues/285)) - ([9d772f0](https://github.com/0x676e67/wreq/commit/9d772f03cac1c9679afe134fb8e5926df1db199b))

### Miscellaneous Tasks

- Remove unused crate path prefix - ([d0ca971](https://github.com/0x676e67/wreq/commit/d0ca971ca58b93c3d1a1f90174a7abd633404eda))
- Sync upstream `From<http::Response<T>> for Response` - ([954a807](https://github.com/0x676e67/wreq/commit/954a80789bc4fb69fefaa74a2db19767fe2f5bce))
- Fmt code - ([f3aeb61](https://github.com/0x676e67/wreq/commit/f3aeb61a72943abb33ce33bb1824d46545c3230b))
- Improved type convert ([#284](https://github.com/0x676e67/wreq/issues/284)) - ([7ab1f2f](https://github.com/0x676e67/wreq/commit/7ab1f2f25734b9af78607b66e0406d644c39fb49))

### Revert

- Remove `From<http::Response<T>> for Response` ([#282](https://github.com/0x676e67/wreq/issues/282)) - ([1e69245](https://github.com/0x676e67/wreq/commit/1e69245677517daaa8ec10ca64d347457925cb38))

## New Contributors ❤️

* @honeyspoon made their first contribution in [#282](https://github.com/0x676e67/wreq/pull/282)

## [1.3.5](https://github.com/0x676e67/wreq/compare/v1.3.3..v1.3.5) - 2025-01-06

### Features

- *(multipart)* Sync upstream file multipart ([#278](https://github.com/0x676e67/wreq/issues/278)) - ([49a3f06](https://github.com/0x676e67/wreq/commit/49a3f06c40942c8b0a600058e769c21dc9d7200a))
- *(request)* Insert header differentiates between append and overwrite ([#274](https://github.com/0x676e67/wreq/issues/274)) - ([c0026ca](https://github.com/0x676e67/wreq/commit/c0026caaa69ead0d42efba051308c87be21f4ab7))
- *(request)* Add general HTTP authentication method ([#270](https://github.com/0x676e67/wreq/issues/270)) - ([5c3facb](https://github.com/0x676e67/wreq/commit/5c3facb9c575658b2171e154b8386d54921b0af6))

### Bug Fixes

- *(redirect)* Fix redirect test - ([9f4bd3f](https://github.com/0x676e67/wreq/commit/9f4bd3fc241aaec158b4cd4e7377fb959459f9c6))
- *(test)* Fix proxy test - ([475752e](https://github.com/0x676e67/wreq/commit/475752e49e438ab3100c9e54082ea9b18bfdb33a))
- *(timeout)* Fix timeout test - ([0bf0422](https://github.com/0x676e67/wreq/commit/0bf0422a6b950e9c72ad642927a1781531f17e03))
- Fix migration hyper1 missing `TokioTimer` ([#275](https://github.com/0x676e67/wreq/issues/275)) - ([a2e8b47](https://github.com/0x676e67/wreq/commit/a2e8b47a80a3272bc621a7d83fd7c8262be6a6d1))

### Documentation

- Update `http2`/`network` docs ([#273](https://github.com/0x676e67/wreq/issues/273)) - ([5edaa93](https://github.com/0x676e67/wreq/commit/5edaa9311c255ceb1204c7bb6c90d2f716f4628b))

### Testing

- *(timeout)* Ignore the test in Tunnel VPN environment ([#279](https://github.com/0x676e67/wreq/issues/279)) - ([156fd1b](https://github.com/0x676e67/wreq/commit/156fd1b6b4f2b8a495dc6b446bd612881bacf3a5))
- Ignore doc test ([#276](https://github.com/0x676e67/wreq/issues/276)) - ([5275c6b](https://github.com/0x676e67/wreq/commit/5275c6b1eee50108061682758d67524c7a40547f))
- Remove unused wasm test - ([25166c9](https://github.com/0x676e67/wreq/commit/25166c977aceb05e752d7b973af6ef3a72cbca4e))

### Miscellaneous Tasks

- *(cookie)* Use `RwLock` types that do not poison themselves ([#268](https://github.com/0x676e67/wreq/issues/268)) - ([dcbd79d](https://github.com/0x676e67/wreq/commit/dcbd79dd324483442ccb715ac277b7ec82be93d3))
- Add all features tests - ([138c43a](https://github.com/0x676e67/wreq/commit/138c43aacb7d753c1ebde15effa6a457a8260dd1))
- Sync upstream tests - ([b782282](https://github.com/0x676e67/wreq/commit/b78228289d86fb93c1e301bf5b367a0f698b15d8))
- Remove unused feature - ([668009d](https://github.com/0x676e67/wreq/commit/668009d641294f8ad227083318447455f3995c00))
- Cargo clippy fix all-features - ([1e45f60](https://github.com/0x676e67/wreq/commit/1e45f60d23d8d03a0567ba2c9bb0b1e414714b4e))
- Remove unused code - ([aa427f5](https://github.com/0x676e67/wreq/commit/aa427f5ecf01762c5cd45ae1690f6654eb20dc46))

### Build

- Fix linux build ([#277](https://github.com/0x676e67/wreq/issues/277)) - ([014e026](https://github.com/0x676e67/wreq/commit/014e02647a4c1f2264f7151576c7350425e59cb7))

### Deps

- Replace `futures_core` with `futures_util` ([#269](https://github.com/0x676e67/wreq/issues/269)) - ([ce9ac8d](https://github.com/0x676e67/wreq/commit/ce9ac8d36ba901b3271ddb879dc34bc65e1dd723))


## [1.3.3](https://github.com/0x676e67/wreq/compare/v1.3.2..v1.3.3) - 2025-01-05

### Features

- *(mimic)* Add Tor browser `Firefox 128` mimic ([#267](https://github.com/0x676e67/wreq/issues/267)) - ([f69f660](https://github.com/0x676e67/wreq/commit/f69f6605de49c13f44006355d31ad9abaac3e060))
- *(mimic)* Optional mimic http2 ([#262](https://github.com/0x676e67/wreq/issues/262)) - ([6e44e17](https://github.com/0x676e67/wreq/commit/6e44e17695f91336a19b69cd0ec12843d9a8ca7a))

### Miscellaneous Tasks

- Simplify http2 configuration - ([34700d1](https://github.com/0x676e67/wreq/commit/34700d1ccae4977f2a0a5b34cd4e9a10b68d6ecc))

### Deps

- *(pool)* Replace `futures_channel::mpsc` with `tokio::sync::mpsc` in Hyper ([#264](https://github.
Download .txt
gitextract_e98nv8b_/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── compilation-guide/
│   │   └── build.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── Cargo.toml
├── LICENSE
├── README.md
├── RELEASE.md
├── bench/
│   ├── http1.rs
│   ├── http1_over_tls.rs
│   ├── http2.rs
│   ├── http2_over_tls.rs
│   ├── support/
│   │   ├── bench.rs
│   │   ├── client.rs
│   │   └── server.rs
│   └── support.rs
├── cliff.toml
├── examples/
│   ├── cert_store.rs
│   ├── connect_via_lower_priority_tokio_runtime.rs
│   ├── emulate.rs
│   ├── form.rs
│   ├── http1_websocket.rs
│   ├── http2_websocket.rs
│   ├── json_dynamic.rs
│   ├── json_typed.rs
│   ├── keylog.rs
│   ├── request_with_emulate.rs
│   ├── request_with_interface.rs
│   ├── request_with_local_address.rs
│   ├── request_with_proxy.rs
│   ├── request_with_redirect.rs
│   ├── request_with_version.rs
│   ├── tor_socks.rs
│   └── unix_socket.rs
├── rustfmt.toml
├── src/
│   ├── client/
│   │   ├── body.rs
│   │   ├── conn/
│   │   │   ├── connector.rs
│   │   │   ├── descriptor.rs
│   │   │   ├── http.rs
│   │   │   ├── proxy/
│   │   │   │   ├── socks.rs
│   │   │   │   └── tunnel.rs
│   │   │   ├── proxy.rs
│   │   │   ├── tcp/
│   │   │   │   └── tokio.rs
│   │   │   ├── tcp.rs
│   │   │   ├── tls_info.rs
│   │   │   ├── uds.rs
│   │   │   └── verbose.rs
│   │   ├── conn.rs
│   │   ├── core/
│   │   │   ├── body/
│   │   │   │   ├── incoming.rs
│   │   │   │   ├── length.rs
│   │   │   │   └── watch.rs
│   │   │   ├── body.rs
│   │   │   ├── conn/
│   │   │   │   ├── http1.rs
│   │   │   │   └── http2.rs
│   │   │   ├── conn.rs
│   │   │   ├── dispatch.rs
│   │   │   ├── error.rs
│   │   │   ├── proto/
│   │   │   │   ├── headers.rs
│   │   │   │   ├── http1/
│   │   │   │   │   ├── buf.rs
│   │   │   │   │   ├── conn.rs
│   │   │   │   │   ├── decode.rs
│   │   │   │   │   ├── dispatch.rs
│   │   │   │   │   ├── encode.rs
│   │   │   │   │   ├── ext.rs
│   │   │   │   │   ├── io.rs
│   │   │   │   │   └── role.rs
│   │   │   │   ├── http1.rs
│   │   │   │   ├── http2/
│   │   │   │   │   ├── client.rs
│   │   │   │   │   └── ping.rs
│   │   │   │   └── http2.rs
│   │   │   ├── proto.rs
│   │   │   ├── rt/
│   │   │   │   ├── bounds.rs
│   │   │   │   ├── timer.rs
│   │   │   │   └── tokio.rs
│   │   │   ├── rt.rs
│   │   │   └── upgrade.rs
│   │   ├── core.rs
│   │   ├── emulate.rs
│   │   ├── future.rs
│   │   ├── group.rs
│   │   ├── layer/
│   │   │   ├── client/
│   │   │   │   ├── exec.rs
│   │   │   │   ├── lazy.rs
│   │   │   │   └── pool.rs
│   │   │   ├── client.rs
│   │   │   ├── config.rs
│   │   │   ├── decoder.rs
│   │   │   ├── redirect/
│   │   │   │   ├── future.rs
│   │   │   │   └── policy.rs
│   │   │   ├── redirect.rs
│   │   │   ├── retry/
│   │   │   │   ├── classify.rs
│   │   │   │   └── scope.rs
│   │   │   ├── retry.rs
│   │   │   ├── timeout/
│   │   │   │   ├── body.rs
│   │   │   │   └── future.rs
│   │   │   └── timeout.rs
│   │   ├── layer.rs
│   │   ├── multipart.rs
│   │   ├── request.rs
│   │   ├── response.rs
│   │   ├── ws/
│   │   │   ├── json.rs
│   │   │   └── message.rs
│   │   └── ws.rs
│   ├── client.rs
│   ├── config.rs
│   ├── cookie.rs
│   ├── dns/
│   │   ├── gai.rs
│   │   ├── hickory.rs
│   │   └── resolve.rs
│   ├── dns.rs
│   ├── error.rs
│   ├── ext.rs
│   ├── header.rs
│   ├── into_uri.rs
│   ├── lib.rs
│   ├── proxy/
│   │   ├── mac.rs
│   │   ├── matcher.rs
│   │   ├── uds.rs
│   │   └── win.rs
│   ├── proxy.rs
│   ├── redirect.rs
│   ├── retry.rs
│   ├── sync.rs
│   ├── tls/
│   │   ├── compress.rs
│   │   ├── conn/
│   │   │   ├── ext.rs
│   │   │   ├── macros.rs
│   │   │   └── service.rs
│   │   ├── conn.rs
│   │   ├── keylog/
│   │   │   └── handle.rs
│   │   ├── keylog.rs
│   │   ├── session.rs
│   │   ├── trust/
│   │   │   ├── identity.rs
│   │   │   ├── parse.rs
│   │   │   └── store.rs
│   │   └── trust.rs
│   ├── tls.rs
│   ├── trace.rs
│   └── util.rs
└── tests/
    ├── badssl.rs
    ├── brotli.rs
    ├── client.rs
    ├── connector_layers.rs
    ├── cookie.rs
    ├── deflate.rs
    ├── emulate.rs
    ├── gzip.rs
    ├── layers.rs
    ├── multipart.rs
    ├── proxy.rs
    ├── redirect.rs
    ├── retry.rs
    ├── support/
    │   ├── crl.pem
    │   ├── delay_server.rs
    │   ├── error.rs
    │   ├── layer.rs
    │   ├── mod.rs
    │   ├── server.cert
    │   ├── server.key
    │   └── server.rs
    ├── timeouts.rs
    ├── unix_socket.rs
    ├── upgrade.rs
    └── zstd.rs
Download .txt
Showing preview only (215K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2585 symbols across 143 files)

FILE: bench/http1.rs
  constant NUM_REQUESTS_TO_SEND (line 10) | const NUM_REQUESTS_TO_SEND: usize = 500;
  function bench (line 13) | fn bench(c: &mut Criterion) {

FILE: bench/http1_over_tls.rs
  constant NUM_REQUESTS_TO_SEND (line 10) | const NUM_REQUESTS_TO_SEND: usize = 500;
  function bench (line 13) | fn bench(c: &mut Criterion) {

FILE: bench/http2.rs
  constant NUM_REQUESTS_TO_SEND (line 10) | const NUM_REQUESTS_TO_SEND: usize = 500;
  function bench (line 13) | fn bench(c: &mut Criterion) {

FILE: bench/http2_over_tls.rs
  constant NUM_REQUESTS_TO_SEND (line 10) | const NUM_REQUESTS_TO_SEND: usize = 500;
  function bench (line 13) | fn bench(c: &mut Criterion) {

FILE: bench/support.rs
  type BoxError (line 7) | pub type BoxError = Box<dyn std::error::Error + Send + Sync>;
  type HttpVersion (line 11) | pub enum HttpVersion {
    method fmt (line 17) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Tls (line 28) | pub enum Tls {
    method fmt (line 34) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function current_thread_runtime (line 43) | pub fn current_thread_runtime() -> tokio::runtime::Runtime {
  function multi_thread_runtime (line 50) | pub fn multi_thread_runtime() -> tokio::runtime::Runtime {

FILE: bench/support/bench.rs
  constant CURRENT_THREAD_LABEL (line 8) | pub const CURRENT_THREAD_LABEL: &str = "current_thread";
  constant MULTI_THREAD_LABEL (line 9) | pub const MULTI_THREAD_LABEL: &str = "multi_thread";
  constant CONCURRENT_CASES (line 10) | pub const CONCURRENT_CASES: &[usize] = &[10, 50, 100, 150];
  constant BODY_CASES (line 20) | pub const BODY_CASES: [(&[u8], usize); 7] = [
  function bench (line 30) | pub fn bench(

FILE: bench/support/client.rs
  function create_wreq_client (line 10) | fn create_wreq_client(tls: Tls, http_version: HttpVersion) -> Result<wre...
  function create_reqwest_client (line 24) | fn create_reqwest_client(tls: Tls, http_version: HttpVersion) -> Result<...
  function wreq_body_assert (line 38) | async fn wreq_body_assert(mut response: wreq::Response, expected_body_si...
  function reqwest_body_assert (line 51) | async fn reqwest_body_assert(mut response: reqwest::Response, expected_b...
  function stream_from_bytes (line 62) | fn stream_from_bytes(
  function wreq_body (line 78) | fn wreq_body(stream: bool, (body, chunk_size): (&'static [u8], usize)) -...
  function reqwest_body (line 88) | fn reqwest_body(stream: bool, (body, chunk_size): (&'static [u8], usize)...
  function wreq_requests_concurrent (line 97) | async fn wreq_requests_concurrent(
  function reqwest_requests_concurrent (line 129) | async fn reqwest_requests_concurrent(
  function bench_clients (line 162) | pub fn bench_clients(

FILE: bench/support/server.rs
  type Server (line 25) | pub struct Server {
    method new (line 32) | pub fn new(tls: Tls) -> Result<Self, BoxError> {
    method local_addr (line 67) | fn local_addr(&self) -> io::Result<SocketAddr> {
    method run (line 71) | async fn run(self, mut shutdown: oneshot::Receiver<()>) -> Result<(), ...
  type Handle (line 106) | pub struct Handle {
    method shutdown (line 112) | pub fn shutdown(self) {
  function with_server (line 118) | pub fn with_server<F>(tls: Tls, f: F) -> Result<(), BoxError>
  function serve (line 147) | async fn serve<S>(builder: Builder<TokioExecutor>, stream: S)
  function handle_connection (line 167) | async fn handle_connection(

FILE: examples/cert_store.rs
  function main (line 39) | async fn main() -> wreq::Result<()> {

FILE: examples/connect_via_lower_priority_tokio_runtime.rs
  function main (line 19) | async fn main() -> wreq::Result<()> {
  function init_background_runtime (line 70) | pub(crate) fn init_background_runtime() {
  function process_cpu_work (line 105) | async fn process_cpu_work() {
  function send_to_background_runtime (line 117) | fn send_to_background_runtime(future: impl Future<Output = ()> + Send + ...
  type BackgroundProcessorLayer (line 146) | pub struct BackgroundProcessorLayer {}
    method new (line 148) | pub fn new() -> Self {
    type Service (line 153) | type Service = BackgroundProcessor<S>;
    method layer (line 154) | fn layer(&self, service: S) -> Self::Service {
    method fmt (line 160) | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
  type BackgroundProcessor (line 168) | pub struct BackgroundProcessor<S> {
  function new (line 173) | pub fn new(inner: S) -> Self {
  type Response (line 185) | type Response = S::Response;
  type Error (line 187) | type Error = BoxError;
  type Future (line 189) | type Future = BackgroundResponseFuture<S::Response>;
    type Output (line 243) | type Output = Result<S, BoxError>;
    method poll (line 245) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Outp...
  function poll_ready (line 191) | fn poll_ready(
  function call (line 201) | fn call(&mut self, req: Request) -> Self::Future {
  function new (line 234) | pub(crate) fn new(rx: tokio::sync::oneshot::Receiver<Result<S, BoxError>...

FILE: examples/emulate.rs
  function main (line 15) | async fn main() -> wreq::Result<()> {

FILE: examples/form.rs
  function main (line 7) | async fn main() {

FILE: examples/http1_websocket.rs
  function main (line 5) | async fn main() -> wreq::Result<()> {

FILE: examples/http2_websocket.rs
  function main (line 12) | async fn main() -> wreq::Result<()> {

FILE: examples/json_dynamic.rs
  function main (line 11) | async fn main() -> wreq::Result<()> {

FILE: examples/json_typed.rs
  type Post (line 11) | struct Post {
  function main (line 23) | async fn main() -> wreq::Result<()> {

FILE: examples/keylog.rs
  function main (line 4) | async fn main() -> wreq::Result<()> {

FILE: examples/request_with_emulate.rs
  function main (line 15) | async fn main() -> wreq::Result<()> {

FILE: examples/request_with_interface.rs
  function main (line 14) | async fn main() -> wreq::Result<()> {
  function main (line 37) | fn main() {}

FILE: examples/request_with_local_address.rs
  function main (line 6) | async fn main() -> wreq::Result<()> {

FILE: examples/request_with_proxy.rs
  function main (line 4) | async fn main() -> wreq::Result<()> {

FILE: examples/request_with_redirect.rs
  function main (line 4) | async fn main() -> wreq::Result<()> {

FILE: examples/request_with_version.rs
  function main (line 4) | async fn main() -> wreq::Result<()> {

FILE: examples/tor_socks.rs
  function main (line 7) | async fn main() -> wreq::Result<()> {

FILE: examples/unix_socket.rs
  function main (line 3) | async fn main() -> wreq::Result<()> {
  function main (line 33) | fn main() {}

FILE: src/client.rs
  type Decompression (line 108) | type Decompression<T> = T;
  type Decompression (line 117) | type Decompression<T> = self::layer::decoder::Decompression<T>;
  type ResponseBody (line 126) | type ResponseBody = TimeoutBody<tower_http::decompression::Decompression...
  type ResponseBody (line 135) | type ResponseBody = TimeoutBody<Incoming>;
  type ClientService (line 138) | type ClientService = Timeout<
  type BoxedClientService (line 152) | type BoxedClientService =
  type BoxedClientLayer (line 156) | type BoxedClientLayer = BoxCloneSyncServiceLayer<
  type Client (line 178) | pub struct Client(Arc<Either<ClientService, BoxedClientService>>);
    method new (line 271) | pub fn new() -> Client {
    method builder (line 276) | pub fn builder() -> ClientBuilder {
    method get (line 344) | pub fn get<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method post (line 354) | pub fn post<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method put (line 364) | pub fn put<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method patch (line 374) | pub fn patch<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method delete (line 384) | pub fn delete<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method head (line 394) | pub fn head<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method options (line 404) | pub fn options<U: IntoUri>(&self, uri: U) -> RequestBuilder {
    method request (line 416) | pub fn request<U: IntoUri>(&self, method: Method, uri: U) -> RequestBu...
    method websocket (line 428) | pub fn websocket<U: IntoUri>(&self, uri: U) -> WebSocketRequestBuilder {
    method execute (line 444) | pub fn execute(&self, request: Request) -> Pending {
    type Response (line 454) | type Response = Response;
    type Error (line 455) | type Error = Error;
    type Future (line 456) | type Future = Pending;
    method poll_ready (line 459) | fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Sel...
    method call (line 464) | fn call(&mut self, req: Request) -> Self::Future {
  type ClientBuilder (line 182) | pub struct ClientBuilder {
    method build (line 494) | pub fn build(self) -> crate::Result<Client> {
    method user_agent (line 680) | pub fn user_agent<V>(mut self, value: V) -> ClientBuilder
    method default_headers (line 737) | pub fn default_headers(mut self, headers: HeaderMap) -> ClientBuilder {
    method orig_headers (line 744) | pub fn orig_headers(mut self, orig_headers: OrigHeaderMap) -> ClientBu...
    method cookie_store (line 762) | pub fn cookie_store(mut self, enable: bool) -> ClientBuilder {
    method cookie_provider (line 784) | pub fn cookie_provider<C: cookie::IntoCookieStore>(mut self, cookie_st...
    method gzip (line 808) | pub fn gzip(mut self, enable: bool) -> ClientBuilder {
    method brotli (line 832) | pub fn brotli(mut self, enable: bool) -> ClientBuilder {
    method zstd (line 856) | pub fn zstd(mut self, enable: bool) -> ClientBuilder {
    method deflate (line 880) | pub fn deflate(mut self, enable: bool) -> ClientBuilder {
    method no_zstd (line 891) | pub fn no_zstd(self) -> ClientBuilder {
    method no_gzip (line 909) | pub fn no_gzip(self) -> ClientBuilder {
    method no_brotli (line 927) | pub fn no_brotli(self) -> ClientBuilder {
    method no_deflate (line 945) | pub fn no_deflate(self) -> ClientBuilder {
    method redirect (line 963) | pub fn redirect(mut self, policy: redirect::Policy) -> ClientBuilder {
    method referer (line 972) | pub fn referer(mut self, enable: bool) -> ClientBuilder {
    method retry (line 980) | pub fn retry(mut self, policy: retry::Policy) -> ClientBuilder {
    method proxy (line 1001) | pub fn proxy(mut self, proxy: Proxy) -> ClientBuilder {
    method no_proxy (line 1015) | pub fn no_proxy(mut self) -> ClientBuilder {
    method timeout (line 1030) | pub fn timeout(mut self, timeout: Duration) -> ClientBuilder {
    method read_timeout (line 1039) | pub fn read_timeout(mut self, timeout: Duration) -> ClientBuilder {
    method connect_timeout (line 1053) | pub fn connect_timeout(mut self, timeout: Duration) -> ClientBuilder {
    method connection_verbose (line 1065) | pub fn connection_verbose(mut self, verbose: bool) -> ClientBuilder {
    method pool_idle_timeout (line 1078) | pub fn pool_idle_timeout<D>(mut self, val: D) -> ClientBuilder
    method pool_max_idle_per_host (line 1088) | pub fn pool_max_idle_per_host(mut self, max: usize) -> ClientBuilder {
    method pool_max_size (line 1095) | pub fn pool_max_size(mut self, max: usize) -> ClientBuilder {
    method https_only (line 1104) | pub fn https_only(mut self, enabled: bool) -> ClientBuilder {
    method http1_only (line 1111) | pub fn http1_only(mut self) -> ClientBuilder {
    method http2_only (line 1118) | pub fn http2_only(mut self) -> ClientBuilder {
    method http1_options (line 1125) | pub fn http1_options<T>(mut self, options: T) -> ClientBuilder
    method http2_options (line 1135) | pub fn http2_options<T>(mut self, options: T) -> ClientBuilder
    method tcp_nodelay (line 1149) | pub fn tcp_nodelay(mut self, enabled: bool) -> ClientBuilder {
    method tcp_keepalive (line 1160) | pub fn tcp_keepalive<D>(mut self, val: D) -> ClientBuilder
    method tcp_keepalive_interval (line 1174) | pub fn tcp_keepalive_interval<D>(mut self, val: D) -> ClientBuilder
    method tcp_keepalive_retries (line 1188) | pub fn tcp_keepalive_retries<C>(mut self, retries: C) -> ClientBuilder
    method tcp_user_timeout (line 1210) | pub fn tcp_user_timeout<D>(mut self, val: D) -> ClientBuilder
    method tcp_reuse_address (line 1220) | pub fn tcp_reuse_address(mut self, enabled: bool) -> ClientBuilder {
    method tcp_send_buffer_size (line 1229) | pub fn tcp_send_buffer_size<S>(mut self, size: S) -> ClientBuilder
    method tcp_recv_buffer_size (line 1241) | pub fn tcp_recv_buffer_size<S>(mut self, size: S) -> ClientBuilder
    method tcp_happy_eyeballs_timeout (line 1262) | pub fn tcp_happy_eyeballs_timeout<D>(mut self, val: D) -> ClientBuilder
    method local_address (line 1283) | pub fn local_address<T>(mut self, addr: T) -> ClientBuilder
    method local_addresses (line 1308) | pub fn local_addresses<V4, V6>(mut self, ipv4: V4, ipv6: V6) -> Client...
    method interface (line 1379) | pub fn interface<T>(mut self, interface: T) -> ClientBuilder
    method tls_identity (line 1391) | pub fn tls_identity(mut self, identity: Identity) -> ClientBuilder {
    method tls_cert_store (line 1401) | pub fn tls_cert_store(mut self, store: CertStore) -> ClientBuilder {
    method tls_cert_verification (line 1418) | pub fn tls_cert_verification(mut self, cert_verification: bool) -> Cli...
    method tls_verify_hostname (line 1432) | pub fn tls_verify_hostname(mut self, verify_hostname: bool) -> ClientB...
    method tls_sni (line 1441) | pub fn tls_sni(mut self, tls_sni: bool) -> ClientBuilder {
    method tls_keylog (line 1448) | pub fn tls_keylog(mut self, keylog: KeyLog) -> ClientBuilder {
    method tls_min_version (line 1457) | pub fn tls_min_version(mut self, version: TlsVersion) -> ClientBuilder {
    method tls_max_version (line 1466) | pub fn tls_max_version(mut self, version: TlsVersion) -> ClientBuilder {
    method tls_info (line 1477) | pub fn tls_info(mut self, tls_info: bool) -> ClientBuilder {
    method tls_session_cache (line 1487) | pub fn tls_session_cache<S: IntoTlsSessionCache>(mut self, store: S) -...
    method tls_options (line 1494) | pub fn tls_options<T>(mut self, options: T) -> ClientBuilder
    method no_hickory_dns (line 1512) | pub fn no_hickory_dns(mut self) -> ClientBuilder {
    method resolve (line 1526) | pub fn resolve<D>(self, domain: D, addr: SocketAddr) -> ClientBuilder
    method resolve_to_addrs (line 1542) | pub fn resolve_to_addrs<D, A>(mut self, domain: D, addrs: A) -> Client...
    method dns_resolver (line 1559) | pub fn dns_resolver<R: IntoResolve>(mut self, resolver: R) -> ClientBu...
    method layer (line 1585) | pub fn layer<L>(mut self, layer: L) -> ClientBuilder
    method connector_layer (line 1622) | pub fn connector_layer<L>(mut self, layer: L) -> ClientBuilder
    method emulation (line 1647) | pub fn emulation<T: IntoEmulation>(self, emulation: T) -> ClientBuilder {
  type HttpVersionPref (line 188) | enum HttpVersionPref {
  type Config (line 194) | struct Config {
  method default (line 255) | fn default() -> Self {
  type Response (line 470) | type Response = Response;
  type Error (line 471) | type Error = Error;
  type Future (line 472) | type Future = Pending;
  function poll_ready (line 475) | fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self:...
  function call (line 480) | fn call(&mut self, req: Request) -> Self::Future {

FILE: src/client/body.rs
  type Body (line 17) | pub struct Body(Either<Full<Bytes>, BoxBody<Bytes, BoxError>>);
    method wrap (line 44) | pub fn wrap<B>(inner: B) -> Body
    method wrap_stream (line 76) | pub fn wrap_stream<S>(stream: S) -> Body
    method stream (line 86) | pub(crate) fn stream<S>(stream: S) -> Body
    method empty (line 107) | pub(crate) fn empty() -> Body {
    method reusable (line 112) | pub(crate) fn reusable(chunk: Bytes) -> Body {
    method content_length (line 118) | pub(crate) fn content_length(&self) -> Option<u64> {
    method try_clone (line 123) | pub(crate) fn try_clone(&self) -> Option<Body> {
    method from (line 140) | fn from(body: BoxBody<Bytes, BoxError>) -> Self {
    method from (line 147) | fn from(bytes: Bytes) -> Body {
    method from (line 154) | fn from(vec: Vec<u8>) -> Body {
    method from (line 161) | fn from(s: &'static [u8]) -> Body {
    method from (line 168) | fn from(s: String) -> Body {
    method from (line 175) | fn from(s: &'static str) -> Body {
    method from (line 183) | fn from(file: File) -> Body {
  method default (line 133) | fn default() -> Body {
  type Data (line 189) | type Data = Bytes;
  type Error (line 190) | type Error = Error;
  method poll_frame (line 193) | fn poll_frame(
  method size_hint (line 204) | fn size_hint(&self) -> SizeHint {
  method is_end_stream (line 209) | fn is_end_stream(&self) -> bool {
  type Data (line 221) | type Data = Bytes;
  type Error (line 222) | type Error = B::Error;
  method poll_frame (line 224) | fn poll_frame(
  method size_hint (line 236) | fn size_hint(&self) -> SizeHint {
  method is_end_stream (line 241) | fn is_end_stream(&self) -> bool {
  function body_exact_length (line 253) | fn body_exact_length() {

FILE: src/client/conn.rs
  type HttpConnector (line 45) | pub type HttpConnector = self::http::HttpConnector<DynResolver, TokioTcp...
  type BoxedConnectorService (line 48) | pub type BoxedConnectorService = BoxCloneSyncService<Unnameable, Conn, B...
  type BoxedConnectorLayer (line 51) | pub type BoxedConnectorLayer =
  type Unnameable (line 59) | pub struct Unnameable(pub(super) descriptor::ConnectionDescriptor);
  type AsyncConn (line 67) | trait AsyncConn: AsyncRead + AsyncWrite + Connection + Send + Sync + Unp...
  type AsyncConnWithInfo (line 73) | trait AsyncConnWithInfo: AsyncConn + TlsInfoFactory {}
  type Connection (line 105) | pub trait Connection {
    method connected (line 107) | fn connected(&self) -> Connected;
    method connected (line 165) | fn connected(&self) -> Connected {
    method connected (line 236) | fn connected(&self) -> Connected {
  type Alpn (line 112) | enum Alpn {
  type PoisonPill (line 119) | struct PoisonPill(Arc<AtomicBool>);
    method fmt (line 305) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
    method healthy (line 319) | fn healthy() -> Self {
  type Extra (line 123) | struct Extra(Box<dyn ExtraInner>);
    method set (line 424) | fn set(&self, res: &mut Extensions) {
  type ExtraInner (line 126) | trait ExtraInner: Send + Sync + Debug {
    method clone_box (line 127) | fn clone_box(&self) -> Box<dyn ExtraInner>;
    method set (line 128) | fn set(&self, res: &mut Extensions);
    method clone_box (line 441) | fn clone_box(&self) -> Box<dyn ExtraInner> {
    method set (line 445) | fn set(&self, res: &mut Extensions) {
    method clone_box (line 462) | fn clone_box(&self) -> Box<dyn ExtraInner> {
    method set (line 466) | fn set(&self, res: &mut Extensions) {
  type ExtraEnvelope (line 135) | struct ExtraEnvelope<T>(T);
  type ExtraChain (line 140) | struct ExtraChain<T>(Box<dyn ExtraInner>, T);
  type ProxyIdentity (line 144) | struct ProxyIdentity {
  type Connected (line 155) | pub struct Connected {
    method new (line 328) | pub fn new() -> Connected {
    method extra (line 338) | pub fn extra<T: Clone + Send + Sync + Debug + 'static>(mut self, extra...
    method set_extras (line 349) | pub fn set_extras(&self, extensions: &mut Extensions) {
    method proxy (line 356) | pub fn proxy(mut self, proxy: Intercept) -> Connected {
    method is_proxied (line 372) | pub fn is_proxied(&self) -> bool {
    method proxy_auth (line 378) | pub fn proxy_auth(&self) -> Option<&HeaderValue> {
    method proxy_headers (line 384) | pub fn proxy_headers(&self) -> Option<&HeaderMap> {
    method negotiated_h2 (line 390) | pub fn negotiated_h2(mut self) -> Connected {
    method is_negotiated_h2 (line 397) | pub fn is_negotiated_h2(&self) -> bool {
    method poisoned (line 403) | pub fn poisoned(&self) -> bool {
    method poison (line 412) | pub fn poison(&self) {
  method poll_read (line 186) | fn poll_read(
  method poll_write (line 197) | fn poll_write(
  method poll_write_vectored (line 206) | fn poll_write_vectored(
  method is_write_vectored (line 215) | fn is_write_vectored(&self) -> bool {
  method poll_flush (line 220) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(),...
  method poll_shutdown (line 225) | fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<...
  method poll_read (line 248) | fn poll_read(
  method poll_write (line 259) | fn poll_write(
  method poll_write_vectored (line 268) | fn poll_write_vectored(
  method is_write_vectored (line 277) | fn is_write_vectored(&self) -> bool {
  method poll_flush (line 282) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(),...
  method poll_shutdown (line 287) | fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<...
  method tls_info (line 297) | fn tls_info(&self) -> Option<TlsInfo> {
  method clone (line 430) | fn clone(&self) -> Extra {
  method clone (line 453) | fn clone(&self) -> Self {

FILE: src/client/conn/connector.rs
  type Connecting (line 37) | type Connecting = Pin<Box<dyn Future<Output = Result<Conn, BoxError>> + ...
  type Config (line 41) | struct Config {
  type ConnectorBuilder (line 54) | pub struct ConnectorBuilder {
    method with_http (line 85) | pub fn with_http<F>(mut self, call: F) -> ConnectorBuilder
    method with_tls (line 95) | pub fn with_tls<F>(mut self, call: F) -> ConnectorBuilder
    method timeout (line 108) | pub fn timeout(mut self, timeout: Option<Duration>) -> ConnectorBuilder {
    method verbose (line 115) | pub fn verbose(mut self, enabled: bool) -> ConnectorBuilder {
    method tls_info (line 122) | pub fn tls_info(mut self, enabled: bool) -> ConnectorBuilder {
    method tcp_nodelay (line 129) | pub fn tcp_nodelay(mut self, enabled: bool) -> ConnectorBuilder {
    method build (line 135) | pub fn build(
  type Connector (line 64) | pub enum Connector {
    method builder (line 202) | pub(crate) fn builder(proxies: Vec<ProxyMatcher>, resolver: DynResolve...
    type Response (line 220) | type Response = Conn;
    type Error (line 221) | type Error = BoxError;
    type Future (line 222) | type Future = Connecting;
    method poll_ready (line 225) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self...
    method call (line 233) | fn call(&mut self, descriptor: ConnectionDescriptor) -> Self::Future {
  type ConnectorService (line 71) | pub struct ConnectorService {
    method build_https_connector (line 244) | fn build_https_connector(
    method tunnel_conn_from_stream (line 288) | fn tunnel_conn_from_stream<IO>(&self, io: MaybeHttpsStream<IO>) -> Res...
    method conn_from_stream (line 310) | fn conn_from_stream<IO, P>(&self, io: MaybeHttpsStream<IO>, proxy: P) ...
    method connect_auto_proxy (line 329) | async fn connect_auto_proxy<P: Into<Option<Intercept>>>(
    method connect_via_proxy (line 356) | async fn connect_via_proxy(
    method connect_auto (line 496) | async fn connect_auto(self, req: ConnectionDescriptor) -> Result<Conn,...
    type Response (line 531) | type Response = Conn;
    type Error (line 532) | type Error = BoxError;
    type Future (line 533) | type Future = Connecting;
    method poll_ready (line 536) | fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Sel...
    method call (line 541) | fn call(&mut self, descriptor: ConnectionDescriptor) -> Self::Future {

FILE: src/client/conn/descriptor.rs
  type ConnectionId (line 25) | pub(crate) struct ConnectionId(Arc<(Group, AtomicU64)>);
  type ConnectionDescriptor (line 33) | pub(crate) struct ConnectionDescriptor {
    method new (line 80) | pub(crate) fn new(
    method id (line 109) | pub(crate) fn id(&self) -> ConnectionId {
    method uri (line 115) | pub(crate) fn uri(&self) -> &Uri {
    method uri_mut (line 121) | pub(crate) fn uri_mut(&mut self) -> &mut Uri {
    method version (line 126) | pub(crate) fn version(&self) -> Option<Version> {
    method tls_options (line 132) | pub(crate) fn tls_options(&self) -> Option<&TlsOptions> {
    method proxy (line 138) | pub(crate) fn proxy(&self) -> Option<&ProxyMacher> {
    method socket_bind_options (line 144) | pub(crate) fn socket_bind_options(&self) -> Option<&SocketBindOptions> {
  method hash (line 45) | fn hash<H: Hasher>(&self, state: &mut H) {
  method eq (line 69) | fn eq(&self, other: &Self) -> bool {

FILE: src/client/conn/http.rs
  type ConnectResult (line 29) | type ConnectResult<S> = Result<<S as TcpConnector>::Connection, ConnectE...
  type BoxConnecting (line 30) | type BoxConnecting<S> = Pin<Box<dyn Future<Output = ConnectResult<S>> + ...
  type HttpTransport (line 37) | pub trait HttpTransport: Service<Uri> + Clone + Send + Sized + 'static
    method enforce_http (line 45) | fn enforce_http(&mut self, enforced: bool);
    method set_nodelay (line 48) | fn set_nodelay(&mut self, nodelay: bool);
    method set_send_buffer_size (line 51) | fn set_send_buffer_size(&mut self, size: Option<usize>);
    method set_recv_buffer_size (line 54) | fn set_recv_buffer_size(&mut self, size: Option<usize>);
    method set_reuse_address (line 57) | fn set_reuse_address(&mut self, reuse: bool);
    method set_tcp_user_timeout (line 61) | fn set_tcp_user_timeout(&mut self, time: Option<Duration>);
    method set_connect_timeout (line 64) | fn set_connect_timeout(&mut self, dur: Option<Duration>);
    method set_happy_eyeballs_timeout (line 69) | fn set_happy_eyeballs_timeout(&mut self, dur: Option<Duration>);
    method set_keepalive (line 73) | fn set_keepalive(&mut self, time: Option<Duration>);
    method set_keepalive_interval (line 77) | fn set_keepalive_interval(&mut self, interval: Option<Duration>);
    method set_keepalive_retries (line 81) | fn set_keepalive_retries(&mut self, retries: Option<u32>);
    method set_interface (line 96) | fn set_interface<I: Into<std::borrow::Cow<'static, str>>>(&mut self, i...
    method set_local_addresses (line 100) | fn set_local_addresses<V4, V6>(&mut self, ipv4_address: V4, ipv6_addre...
    method enforce_http (line 189) | fn enforce_http(&mut self, is_enforced: bool) {
    method set_nodelay (line 197) | fn set_nodelay(&mut self, nodelay: bool) {
    method set_send_buffer_size (line 203) | fn set_send_buffer_size(&mut self, size: Option<usize>) {
    method set_recv_buffer_size (line 209) | fn set_recv_buffer_size(&mut self, size: Option<usize>) {
    method set_reuse_address (line 217) | fn set_reuse_address(&mut self, reuse_address: bool) {
    method set_tcp_user_timeout (line 224) | fn set_tcp_user_timeout(&mut self, time: Option<Duration>) {
    method set_connect_timeout (line 235) | fn set_connect_timeout(&mut self, dur: Option<Duration>) {
    method set_happy_eyeballs_timeout (line 252) | fn set_happy_eyeballs_timeout(&mut self, dur: Option<Duration>) {
    method set_keepalive (line 263) | fn set_keepalive(&mut self, time: Option<Duration>) {
    method set_keepalive_interval (line 270) | fn set_keepalive_interval(&mut self, interval: Option<Duration>) {
    method set_keepalive_retries (line 277) | fn set_keepalive_retries(&mut self, retries: Option<u32>) {
    method set_interface (line 317) | fn set_interface<I: Into<std::borrow::Cow<'static, str>>>(&mut self, i...
    method set_local_addresses (line 327) | fn set_local_addresses<V4, V6>(&mut self, ipv4_address: V4, ipv6_addre...
  type HttpConnector (line 115) | pub struct HttpConnector<R, S> {
  type HttpInfo (line 142) | pub struct HttpInfo {
    method remote_addr (line 449) | pub fn remote_addr(&self) -> SocketAddr {
    method local_addr (line 454) | pub fn local_addr(&self) -> SocketAddr {
  function new (line 151) | pub fn new(resolver: R, connector: S) -> HttpConnector<R, S> {
  function config_mut (line 171) | fn config_mut(&mut self) -> &mut TcpOptions {
  type Response (line 345) | type Response = S::Connection;
  type Error (line 346) | type Error = ConnectError;
  type Future (line 347) | type Future = HttpConnecting<R, S>;
    type Output (line 478) | type Output = ConnectResult<S>;
    method poll (line 481) | fn poll(self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Self...
  function poll_ready (line 350) | fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll<Result<(), ...
  function call (line 354) | fn call(&mut self, dst: Uri) -> Self::Future {
  function get_host_port (line 390) | fn get_host_port<'u>(options: &TcpOptions, dst: &'u Uri) -> Result<(&'u ...
  function set_port (line 441) | fn set_port(addr: &mut SocketAddr, host_port: u16, explicit: bool) {

FILE: src/client/conn/proxy.rs
  type Output (line 33) | type Output = Result<T, E2>;
  method poll (line 36) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {

FILE: src/client/conn/proxy/socks.rs
  type SocksError (line 23) | pub enum SocksError {
    method fmt (line 34) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    method from (line 58) | fn from(err: std::io::Error) -> Self {
    method from (line 64) | fn from(err: std::str::Utf8Error) -> Self {
    method from (line 70) | fn from(err: tokio_socks::Error) -> Self {
  type Version (line 78) | pub enum Version {
  type DnsResolve (line 86) | pub enum DnsResolve {
  type SocksConnector (line 92) | pub struct SocksConnector<C, R = GaiResolver> {
  function new (line 106) | pub fn new(proxy_dst: Uri, inner: C, resolver: R) -> Self {
  function set_auth (line 119) | pub fn set_auth(&mut self, auth: Option<(Bytes, Bytes)>) {
  function set_version (line 125) | pub fn set_version(&mut self, version: Version) {
  function set_dns_mode (line 131) | pub fn set_dns_mode(&mut self, dns_resolve: DnsResolve) {
  type Response (line 145) | type Response = C::Response;
  type Error (line 146) | type Error = SocksError;
  type Future (line 147) | type Future = Tunneling<C::Future, C::Response, Self::Error>;
  function poll_ready (line 150) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 157) | fn call(&mut self, dst: Uri) -> Self::Future {

FILE: src/client/conn/proxy/tunnel.rs
  type TunnelConnector (line 20) | pub struct TunnelConnector<C> {
  type Headers (line 27) | enum Headers {
  type TunnelError (line 34) | pub enum TunnelError {
    method fmt (line 201) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    method source (line 217) | fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
  function new (line 53) | pub fn new(proxy_dst: Uri, connector: C) -> Self {
  function with_auth (line 62) | pub fn with_auth(mut self, mut auth: HeaderValue) -> Self {
  function with_headers (line 83) | pub fn with_headers(mut self, mut headers: HeaderMap) -> Self {
  type Response (line 110) | type Response = C::Response;
  type Error (line 111) | type Error = TunnelError;
  type Future (line 112) | type Future = Tunneling<C::Future, C::Response, Self::Error>;
  function poll_ready (line 115) | fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll<Result<(), ...
  function call (line 122) | fn call(&mut self, dst: Uri) -> Self::Future {
  function tunnel (line 145) | async fn tunnel<T>(mut conn: T, host: &str, port: u16, headers: &Headers...

FILE: src/client/conn/tcp.rs
  type TcpConnector (line 33) | pub trait TcpConnector: Clone + Send + Sync + 'static {
    method connect (line 55) | fn connect(&self, socket: Self::TcpStream, addr: SocketAddr) -> Self::...
    method sleep (line 58) | fn sleep(&self, duration: Duration) -> Self::Sleep;
  type ConnectingTcp (line 61) | pub(super) struct ConnectingTcp<S: TcpConnector> {
  type ConnectingTcpFallback (line 66) | struct ConnectingTcpFallback<S: TcpConnector> {
  type ConnectingTcpRemote (line 71) | struct ConnectingTcpRemote<S: TcpConnector> {
  function new (line 81) | pub(super) fn new(remote_addrs: dns::SocketAddrs, config: &TcpOptions, c...
  function new (line 130) | fn new(addrs: dns::SocketAddrs, connect_timeout: Option<Duration>, conne...
  function connect (line 140) | async fn connect(&mut self, config: &TcpOptions) -> Result<S::Connection...
  function bind_local_address (line 178) | fn bind_local_address(
  function connect (line 206) | fn connect<S: TcpConnector>(
  function connect (line 347) | pub(super) async fn connect(
  type ConnectError (line 384) | pub struct ConnectError {
    method new (line 391) | pub(super) fn new<E>(msg: &'static str, cause: E) -> ConnectError
    method dns (line 402) | pub(super) fn dns<E>(cause: E) -> ConnectError
    method m (line 409) | pub(super) fn m<E>(msg: &'static str) -> impl FnOnce(E) -> ConnectError
    method fmt (line 418) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 432) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method source (line 438) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  type SocketBindOptions (line 445) | pub(crate) struct SocketBindOptions {
    method set_interface (line 494) | pub fn set_interface<I>(&mut self, interface: I) -> &mut Self
    method set_local_address (line 508) | pub fn set_local_address<V>(&mut self, local_address: V)
    method set_local_addresses (line 530) | pub fn set_local_addresses<V4, V6>(&mut self, ipv4_address: V4, ipv6_a...
  type TcpOptions (line 545) | pub(crate) struct TcpOptions {
  type TcpKeepaliveOptions (line 560) | pub(crate) struct TcpKeepaliveOptions {
    method into_tcpkeepalive (line 600) | pub(crate) fn into_tcpkeepalive(self) -> Option<TcpKeepalive> {

FILE: src/client/conn/tcp/tokio.rs
  type TokioTcpConnector (line 10) | pub struct TokioTcpConnector {
    method new (line 16) | pub fn new() -> Self {
  type TcpStream (line 22) | type TcpStream = std::net::TcpStream;
  type Connection (line 23) | type Connection = TcpStream;
  type Error (line 24) | type Error = io::Error;
  type Future (line 25) | type Future = Pin<Box<dyn Future<Output = Result<Self::Connection, Self:...
  type Sleep (line 26) | type Sleep = tokio::time::Sleep;
  method connect (line 29) | fn connect(&self, socket: Self::TcpStream, addr: SocketAddr) -> Self::Fu...
  method sleep (line 35) | fn sleep(&self, duration: Duration) -> Self::Sleep {
  method connected (line 41) | fn connected(&self) -> Connected {

FILE: src/client/conn/tls_info.rs
  type TlsInfoFactory (line 13) | pub trait TlsInfoFactory {
    method tls_info (line 14) | fn tls_info(&self) -> Option<TlsInfo>;
    method tls_info (line 37) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 44) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 50) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 60) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 69) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 77) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 84) | fn tls_info(&self) -> Option<TlsInfo> {
    method tls_info (line 95) | fn tls_info(&self) -> Option<TlsInfo> {
  function extract_tls_info (line 17) | fn extract_tls_info<S>(ssl_stream: &SslStream<S>) -> TlsInfo {

FILE: src/client/conn/uds.rs
  type ConnectResult (line 14) | type ConnectResult = io::Result<UnixStream>;
  type BoxConnecting (line 15) | type BoxConnecting = Pin<Box<dyn Future<Output = ConnectResult> + Send>>;
  type UnixConnector (line 18) | pub struct UnixConnector {
    method new (line 24) | pub fn new(path: impl Into<Arc<Path>>) -> Self {
    type Response (line 30) | type Response = UnixStream;
    type Error (line 31) | type Error = io::Error;
    type Future (line 32) | type Future = BoxConnecting;
    method poll_ready (line 35) | fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Sel...
    method call (line 39) | fn call(&mut self, _: Uri) -> Self::Future {
  method connected (line 50) | fn connected(&self) -> Connected {

FILE: src/client/conn/verbose.rs
  type Verbose (line 8) | pub struct Verbose(pub(super) bool);
    constant OFF (line 11) | pub const OFF: Verbose = Verbose(false);
    method wrap (line 14) | pub(super) fn wrap<T>(&self, conn: T) -> Box<dyn AsyncConnWithInfo>
  type Wrapper (line 44) | pub(super) struct Wrapper<T> {
  method connected (line 51) | fn connected(&self) -> Connected {
  method poll_read (line 57) | fn poll_read(
  method poll_write (line 74) | fn poll_write(
  method poll_write_vectored (line 89) | fn poll_write_vectored(
  method is_write_vectored (line 109) | fn is_write_vectored(&self) -> bool {
  method poll_flush (line 114) | fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Re...
  method poll_shutdown (line 119) | fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<io:...
  method tls_info (line 125) | fn tls_info(&self) -> Option<TlsInfo> {
  type Vectored (line 130) | struct Vectored<'a, 'b> {
  function fmt (line 136) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

FILE: src/client/core/body.rs
  function _assert_send_sync (line 29) | fn _assert_send_sync() {

FILE: src/client/core/body/incoming.rs
  type Incoming (line 21) | pub struct Incoming {
    method empty (line 66) | pub(crate) fn empty() -> Incoming {
    method h1 (line 70) | pub(crate) fn h1(content_length: DecodedLength, wanter: bool) -> (Send...
    method h2 (line 95) | pub(crate) fn h2(
    method fmt (line 232) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method channel (line 311) | pub(crate) fn channel() -> (Sender, Incoming) {
  type Kind (line 25) | enum Kind {
  type Sender (line 56) | pub(crate) struct Sender {
    method poll_ready (line 247) | pub(crate) fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Resu...
    method send_data (line 267) | pub(crate) fn send_data(&mut self, chunk: Bytes) -> Result<(), Bytes> {
    method send_trailers (line 282) | pub(crate) fn send_trailers(&mut self, trailers: HeaderMap) -> Result<...
    method send_error (line 292) | pub(crate) fn send_error(&mut self, err: Error) {
    method ready (line 317) | async fn ready(&mut self) -> Result<()> {
    method abort (line 321) | fn abort(mut self) {
  type Data (line 118) | type Data = Bytes;
  type Error (line 119) | type Error = Error;
  method poll_frame (line 121) | fn poll_frame(
  method is_end_stream (line 212) | fn is_end_stream(&self) -> bool {
  method size_hint (line 221) | fn size_hint(&self) -> SizeHint {
  function test_size_of (line 327) | fn test_size_of() {
  function size_hint (line 354) | fn size_hint() {
  function channel_abort (line 373) | async fn channel_abort() {
  function channel_abort_when_buffer_is_full (line 383) | async fn channel_abort_when_buffer_is_full() {
  function channel_buffers_two (line 405) | async fn channel_buffers_two() {
  function channel_empty (line 424) | async fn channel_empty() {
  function channel_ready (line 430) | fn channel_ready() {
  function channel_wanter (line 439) | fn channel_wanter() {
  function channel_notices_closure (line 460) | fn channel_notices_closure() {

FILE: src/client/core/body/length.rs
  type DecodedLength (line 6) | pub(crate) struct DecodedLength(u64);
    constant MAX_LEN (line 9) | pub(crate) const MAX_LEN: u64 = u64::MAX - 2;
    constant CLOSE_DELIMITED (line 10) | pub(crate) const CLOSE_DELIMITED: DecodedLength = DecodedLength(u64::M...
    constant CHUNKED (line 11) | pub(crate) const CHUNKED: DecodedLength = DecodedLength(u64::MAX - 1);
    constant ZERO (line 12) | pub(crate) const ZERO: DecodedLength = DecodedLength(0);
    method danger_len (line 19) | pub(crate) fn danger_len(self) -> u64 {
    method into_opt (line 26) | pub(crate) fn into_opt(self) -> Option<u64> {
    method checked_new (line 34) | pub(crate) fn checked_new(len: u64) -> Result<Self, Parse> {
    method sub_if (line 48) | pub(crate) fn sub_if(&mut self, amt: u64) {
    method is_exact (line 63) | pub(crate) fn is_exact(&self) -> bool {
    method from (line 69) | fn from(len: Option<u64>) -> Self {
    method fmt (line 77) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 87) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method new (line 102) | pub(crate) fn new(len: u64) -> Self {
  function sub_if_known (line 109) | fn sub_if_known() {
  function sub_if_chunked (line 117) | fn sub_if_chunked() {

FILE: src/client/core/body/watch.rs
  type Value (line 19) | type Value = u8;
  constant READY (line 20) | const READY: Value = 2;
  constant PENDING (line 21) | const PENDING: Value = 1;
  constant CLOSED (line 22) | const CLOSED: Value = 0;
  function channel (line 24) | pub(super) fn channel(wanter: bool) -> (Sender, Receiver) {
  type Shared (line 39) | struct Shared {
  type Sender (line 44) | pub(super) struct Sender {
    method ready (line 56) | pub(super) fn ready(&self) {
    method send (line 60) | fn send(&self, value: Value) {
  type Receiver (line 48) | pub(super) struct Receiver {
    method poll_ready (line 78) | pub(super) fn poll_ready(&self, cx: &mut task::Context<'_>) -> Poll<Re...
  method drop (line 69) | fn drop(&mut self) {

FILE: src/client/core/conn/http1.rs
  type SendRequest (line 27) | pub struct SendRequest<B> {
  type Parts (line 37) | pub struct Parts<T> {
  type Connection (line 56) | pub struct Connection<T, B>
  function into_parts (line 74) | pub fn into_parts(self) -> Parts<T> {
  type Builder (line 87) | pub struct Builder {
    method new (line 203) | pub fn new() -> Builder {
    method options (line 211) | pub fn options(&mut self, opts: Http1Options) {
    method handshake (line 219) | pub async fn handshake<T, B>(self, io: T) -> Result<(SendRequest<B>, C...
  function poll_ready (line 98) | pub fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
  function ready (line 106) | pub async fn ready(&mut self) -> Result<()> {
  function is_ready (line 118) | pub fn is_ready(&self) -> bool {
  function try_send_request (line 135) | pub fn try_send_request(
  function with_upgrades (line 169) | pub fn with_upgrades(self) -> upgrades::UpgradeableConnection<T, B> {
  type Output (line 181) | type Output = Result<()>;
  method poll (line 183) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  type UpgradeableConnection (line 290) | pub struct UpgradeableConnection<T, B>
  type Output (line 306) | type Output = Result<()>;
  method poll (line 308) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...

FILE: src/client/core/conn/http2.rs
  type SendRequest (line 28) | pub struct SendRequest<B> {
  method clone (line 34) | fn clone(&self) -> SendRequest<B> {
  type Connection (line 46) | pub struct Connection<T, B, E>
  type Builder (line 63) | pub struct Builder<Ex> {
  function poll_ready (line 76) | pub fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<()>> {
  function ready (line 88) | pub async fn ready(&mut self) -> Result<()> {
  function is_ready (line 100) | pub fn is_ready(&self) -> bool {
  function is_closed (line 106) | pub fn is_closed(&self) -> bool {
  function try_send_request (line 123) | pub fn try_send_request(
  type Output (line 160) | type Output = Result<()>;
  method poll (line 163) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  function new (line 179) | pub fn new(exec: Ex) -> Builder<Ex> {
  function timer (line 189) | pub fn timer<M>(&mut self, timer: M)
  function options (line 198) | pub fn options(&mut self, opts: Http2Options) {
  function handshake (line 206) | pub async fn handshake<T, B>(self, io: T) -> Result<(SendRequest<B>, Con...

FILE: src/client/core/dispatch.rs
  type RetryPromise (line 14) | type RetryPromise<T, U> = oneshot::Receiver<Result<U, TrySendError<T>>>;
  function channel (line 16) | pub(crate) fn channel<T, U>() -> (Sender<T, U>, Receiver<T, U>) {
  type TrySendError (line 36) | pub struct TrySendError<T> {
  type Sender (line 45) | pub(crate) struct Sender<T, U> {
  type UnboundedSender (line 63) | pub(crate) struct UnboundedSender<T, U> {
  function poll_ready (line 71) | pub(crate) fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<super:...
  function is_ready (line 76) | pub(crate) fn is_ready(&self) -> bool {
  function try_send (line 80) | pub(crate) fn try_send(&mut self, val: T) -> Result<RetryPromise<T, U>, ...
  function unbound (line 99) | pub(crate) fn unbound(self) -> UnboundedSender<T, U> {
  function is_ready (line 109) | pub(crate) fn is_ready(&self) -> bool {
  function is_closed (line 114) | pub(crate) fn is_closed(&self) -> bool {
  function try_send (line 118) | pub(crate) fn try_send(&mut self, val: T) -> Result<RetryPromise<T, U>, ...
  method clone (line 129) | fn clone(&self) -> Self {
  type Receiver (line 137) | pub(crate) struct Receiver<T, U> {
  function poll_recv (line 143) | pub(crate) fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<...
  function close (line 156) | pub(crate) fn close(&mut self) {
  function try_recv (line 162) | pub(crate) fn try_recv(&mut self) -> Option<(T, Callback<T, U>)> {
  method drop (line 173) | fn drop(&mut self) {
  type Envelope (line 180) | struct Envelope<T, U>(Option<(T, Callback<T, U>)>);
  method drop (line 183) | fn drop(&mut self) {
  type Callback (line 193) | pub(crate) struct Callback<T, U>(Option<oneshot::Sender<Result<U, TrySen...
  method drop (line 196) | fn drop(&mut self) {
  function dispatch_gone (line 207) | fn dispatch_gone() -> Error {
  constant MISSING_SENDER (line 217) | const MISSING_SENDER: &'static str = "callback sender missing";
  function is_canceled (line 220) | pub(crate) fn is_canceled(&self) -> bool {
  function poll_canceled (line 225) | pub(crate) fn poll_canceled(&mut self, cx: &mut Context<'_>) -> Poll<()> {
  function send (line 230) | pub(crate) fn send(mut self, val: Result<U, TrySendError<T>>) {
  function take_message (line 242) | pub fn take_message(&mut self) -> Option<T> {
  function into_error (line 248) | pub fn into_error(self) -> Error {
  type Output (line 271) | type Output = ();
  method poll (line 273) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {

FILE: src/client/core/error.rs
  type Result (line 5) | pub type Result<T, E = Error> = std::result::Result<T, E>;
  type BoxError (line 7) | pub type BoxError = Box<dyn StdError + Send + Sync>;
  type Cause (line 9) | type Cause = BoxError;
  type Error (line 32) | pub struct Error {
    method is_parse (line 109) | pub fn is_parse(&self) -> bool {
    method is_parse_status (line 116) | pub fn is_parse_status(&self) -> bool {
    method is_user (line 122) | pub fn is_user(&self) -> bool {
    method is_canceled (line 128) | pub fn is_canceled(&self) -> bool {
    method is_closed (line 134) | pub fn is_closed(&self) -> bool {
    method is_incomplete_message (line 140) | pub fn is_incomplete_message(&self) -> bool {
    method is_body_write_aborted (line 146) | pub fn is_body_write_aborted(&self) -> bool {
    method is_timeout (line 152) | pub fn is_timeout(&self) -> bool {
    method new (line 157) | pub(super) fn new(kind: Kind) -> Error {
    method with (line 164) | pub(super) fn with<C: Into<Cause>>(mut self, cause: C) -> Error {
    method find_source (line 169) | pub(crate) fn find_source<E: StdError + 'static>(&self) -> Option<&E> {
    method h2_reason (line 182) | pub(super) fn h2_reason(&self) -> http2::Reason {
    method new_canceled (line 191) | pub(super) fn new_canceled() -> Error {
    method new_incomplete (line 196) | pub(super) fn new_incomplete() -> Error {
    method new_too_large (line 201) | pub(super) fn new_too_large() -> Error {
    method new_version_h2 (line 206) | pub(super) fn new_version_h2() -> Error {
    method new_unexpected_message (line 211) | pub(super) fn new_unexpected_message() -> Error {
    method new_io (line 216) | pub(super) fn new_io(cause: std::io::Error) -> Error {
    method new_closed (line 221) | pub(super) fn new_closed() -> Error {
    method new_body (line 226) | pub(super) fn new_body<E: Into<Cause>>(cause: E) -> Error {
    method new_body_write (line 231) | pub(super) fn new_body_write<E: Into<Cause>>(cause: E) -> Error {
    method new_body_write_aborted (line 236) | pub(super) fn new_body_write_aborted() -> Error {
    method new_user (line 241) | fn new_user(user: User) -> Error {
    method new_user_no_upgrade (line 246) | pub(super) fn new_user_no_upgrade() -> Error {
    method new_user_manual_upgrade (line 251) | pub(super) fn new_user_manual_upgrade() -> Error {
    method new_user_service (line 256) | pub(super) fn new_user_service<E: Into<Cause>>(cause: E) -> Error {
    method new_user_body (line 261) | pub(super) fn new_user_body<E: Into<Cause>>(cause: E) -> Error {
    method new_user_invalid_connect (line 266) | pub(super) fn new_user_invalid_connect() -> Error {
    method new_shutdown (line 271) | pub(super) fn new_shutdown(cause: std::io::Error) -> Error {
    method new_user_dispatch_gone (line 276) | pub(super) fn new_user_dispatch_gone() -> Error {
    method new_h2 (line 280) | pub(super) fn new_h2(cause: ::http2::Error) -> Error {
    method description (line 288) | fn description(&self) -> &str {
    method fmt (line 331) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 342) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method from (line 358) | fn from(err: Parse) -> Error {
  type ErrorImpl (line 36) | struct ErrorImpl {
  type Kind (line 42) | pub(super) enum Kind {
  type Parse (line 66) | pub(crate) enum Parse {
    method content_length_invalid (line 365) | pub(crate) fn content_length_invalid() -> Self {
    method transfer_encoding_unexpected (line 370) | pub(crate) fn transfer_encoding_unexpected() -> Self {
    method from (line 376) | fn from(err: httparse::Error) -> Parse {
    method from (line 390) | fn from(_: http::method::InvalidMethod) -> Parse {
    method from (line 396) | fn from(_: http::status::InvalidStatusCode) -> Parse {
    method from (line 402) | fn from(_: http::uri::InvalidUri) -> Parse {
    method from (line 408) | fn from(_: http::uri::InvalidUriParts) -> Parse {
  type Header (line 78) | pub(crate) enum Header {
  type User (line 85) | pub(super) enum User {
  type TimedOut (line 104) | pub(super) struct TimedOut;
    method fmt (line 416) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method source (line 348) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  function assert_send_sync (line 429) | fn assert_send_sync<T: Send + Sync + 'static>() {}
  function error_satisfies_send_sync (line 432) | fn error_satisfies_send_sync() {
  function error_size_of (line 437) | fn error_size_of() {
  function h2_reason_unknown (line 442) | fn h2_reason_unknown() {
  function h2_reason_one_level (line 448) | fn h2_reason_one_level() {
  function h2_reason_nested (line 454) | fn h2_reason_nested() {

FILE: src/client/core/proto.rs
  type RequestLine (line 10) | pub(crate) struct RequestLine(http::Method, http::Uri);
  type MessageHead (line 14) | pub(crate) struct MessageHead<S> {
  type RequestHead (line 26) | type RequestHead = MessageHead<RequestLine>;
  type ResponseHead (line 29) | type ResponseHead = MessageHead<http::StatusCode>;
  type BodyLength (line 32) | pub(crate) enum BodyLength {
  type Dispatched (line 40) | pub(crate) enum Dispatched {
  function into_response (line 48) | fn into_response<B>(self, body: B) -> http::Response<B> {

FILE: src/client/core/proto/headers.rs
  function connection_keep_alive (line 8) | pub(super) fn connection_keep_alive(value: &HeaderValue) -> bool {
  function connection_close (line 13) | pub(super) fn connection_close(value: &HeaderValue) -> bool {
  function connection_has (line 17) | fn connection_has(value: &HeaderValue, needle: &str) -> bool {
  function content_length_parse_all (line 29) | pub(super) fn content_length_parse_all(headers: &HeaderMap) -> Option<u6...
  function content_length_parse_all_values (line 33) | pub(super) fn content_length_parse_all_values(values: ValueIter<'_, Head...
  function from_digits (line 60) | fn from_digits(bytes: &[u8]) -> Option<u64> {
  function method_has_defined_payload_semantics (line 88) | pub(super) fn method_has_defined_payload_semantics(method: &Method) -> b...
  function set_content_length_if_missing (line 96) | pub(super) fn set_content_length_if_missing(headers: &mut HeaderMap, len...
  function transfer_encoding_is_chunked (line 103) | pub(super) fn transfer_encoding_is_chunked(headers: &HeaderMap) -> bool {
  function is_chunked (line 107) | pub(super) fn is_chunked(mut encodings: ValueIter<'_, HeaderValue>) -> b...
  function add_chunked (line 121) | pub(super) fn add_chunked(mut entry: http::header::OccupiedEntry<'_, Hea...

FILE: src/client/core/proto/http1.rs
  type Http1Transaction (line 24) | pub(crate) trait Http1Transaction {
    constant LOG (line 30) | const LOG: &'static str;
    method parse (line 32) | fn parse(
    method encode (line 37) | fn encode(enc: Encode<'_, Self::Outgoing>, dst: &mut Vec<u8>) -> Resul...
    method on_error (line 39) | fn on_error(err: &Error) -> Option<MessageHead<Self::Outgoing>>;
    method update_date (line 41) | fn update_date() {}
  type ParsedMessage (line 45) | pub(crate) struct ParsedMessage<T> {
  type ParseContext (line 53) | pub(crate) struct ParseContext<'a> {
  type Encode (line 62) | pub(crate) struct Encode<'a, T> {
  type Wants (line 70) | struct Wants(u8);
    constant EMPTY (line 73) | const EMPTY: Wants = Wants(0b00);
    constant EXPECT (line 74) | const EXPECT: Wants = Wants(0b01);
    constant UPGRADE (line 75) | const UPGRADE: Wants = Wants(0b10);
    method add (line 79) | fn add(self, other: Wants) -> Wants {
    method contains (line 84) | fn contains(&self, other: Wants) -> bool {
  type Http1OptionsBuilder (line 92) | pub struct Http1OptionsBuilder {
    method http09_responses (line 132) | pub fn http09_responses(mut self, enabled: bool) -> Self {
    method writev (line 150) | pub fn writev(mut self, writev: Option<bool>) -> Self {
    method max_headers (line 169) | pub fn max_headers(mut self, max_headers: usize) -> Self {
    method read_buf_exact_size (line 180) | pub fn read_buf_exact_size(mut self, sz: Option<usize>) -> Self {
    method max_buf_size (line 197) | pub fn max_buf_size(mut self, max: usize) -> Self {
    method allow_spaces_after_header_name_in_responses (line 226) | pub fn allow_spaces_after_header_name_in_responses(mut self, enabled: ...
    method ignore_invalid_headers_in_responses (line 239) | pub fn ignore_invalid_headers_in_responses(mut self, enabled: bool) ->...
    method allow_obsolete_multiline_headers_in_responses (line 246) | pub fn allow_obsolete_multiline_headers_in_responses(mut self, value: ...
    method build (line 253) | pub fn build(self) -> Http1Options {
  type Http1Options (line 103) | pub struct Http1Options {
    method builder (line 260) | pub fn builder() -> Http1OptionsBuilder {

FILE: src/client/core/proto/http1/buf.rs
  type BufList (line 6) | pub(crate) struct BufList<T> {
  function new (line 13) | pub(crate) fn new() -> BufList<T> {
  function push (line 21) | pub(crate) fn push(&mut self, buf: T) {
  function bufs_cnt (line 28) | pub(crate) fn bufs_cnt(&self) -> usize {
  method remaining (line 35) | fn remaining(&self) -> usize {
  method chunk (line 40) | fn chunk(&self) -> &[u8] {
  method advance (line 45) | fn advance(&mut self, mut cnt: usize) {
  method chunks_vectored (line 65) | fn chunks_vectored<'t>(&'t self, dst: &mut [IoSlice<'t>]) -> usize {
  method copy_to_bytes (line 80) | fn copy_to_bytes(&mut self, len: usize) -> Bytes {
  function hello_world_buf (line 110) | fn hello_world_buf() -> BufList<Bytes> {
  function to_bytes_shorter (line 119) | fn to_bytes_shorter() {
  function to_bytes_eq (line 131) | fn to_bytes_eq() {
  function to_bytes_longer (line 142) | fn to_bytes_longer() {
  function one_long_buf_to_bytes (line 150) | fn one_long_buf_to_bytes() {
  function buf_to_bytes_too_many (line 159) | fn buf_to_bytes_too_many() {

FILE: src/client/core/proto/http1/conn.rs
  type Conn (line 36) | pub(crate) struct Conn<I, B, T> {
  function new (line 48) | pub(crate) fn new(io: I) -> Conn<I, B, T> {
  function set_write_strategy_queue (line 74) | pub(crate) fn set_write_strategy_queue(&mut self) {
  function set_max_buf_size (line 79) | pub(crate) fn set_max_buf_size(&mut self, max: usize) {
  function set_read_buf_exact_size (line 84) | pub(crate) fn set_read_buf_exact_size(&mut self, sz: usize) {
  function set_write_strategy_flatten (line 89) | pub(crate) fn set_write_strategy_flatten(&mut self) {
  function set_h1_parser_config (line 94) | pub(crate) fn set_h1_parser_config(&mut self, parser_config: ParserConfi...
  function set_h09_responses (line 99) | pub(crate) fn set_h09_responses(&mut self) {
  function set_http1_max_headers (line 104) | pub(crate) fn set_http1_max_headers(&mut self, val: usize) {
  function into_inner (line 109) | pub(super) fn into_inner(self) -> (I, Bytes) {
  function pending_upgrade (line 114) | pub(super) fn pending_upgrade(&mut self) -> Option<upgrade::Pending> {
  function is_read_closed (line 119) | pub(super) fn is_read_closed(&self) -> bool {
  function is_write_closed (line 124) | pub(super) fn is_write_closed(&self) -> bool {
  function can_read_head (line 128) | pub(super) fn can_read_head(&self) -> bool {
  function can_read_body (line 137) | pub(super) fn can_read_body(&self) -> bool {
  function should_error_on_eof (line 145) | fn should_error_on_eof(&self) -> bool {
  function has_h2_prefix (line 151) | fn has_h2_prefix(&self) -> bool {
  function poll_read_head (line 158) | pub(super) fn poll_read_head(
  function on_read_head_error (line 234) | fn on_read_head_error<Z>(&mut self, e: Error) -> Poll<Option<Result<Z>>> {
  function poll_read_body (line 260) | pub(super) fn poll_read_body(
  function wants_read_again (line 327) | pub(super) fn wants_read_again(&mut self) -> bool {
  function poll_read_keep_alive (line 333) | pub(super) fn poll_read_keep_alive(&mut self, cx: &mut Context<'_>) -> P...
  function is_mid_message (line 346) | fn is_mid_message(&self) -> bool {
  function require_empty_read (line 357) | fn require_empty_read(&mut self, cx: &mut Context<'_>) -> Poll<Result<()...
  function mid_message_detect_eof (line 389) | fn mid_message_detect_eof(&mut self, cx: &mut Context<'_>) -> Poll<Resul...
  function force_io_read (line 408) | fn force_io_read(&mut self, cx: &mut Context<'_>) -> Poll<io::Result<usi...
  function maybe_notify (line 420) | fn maybe_notify(&mut self, cx: &mut Context<'_>) {
  function try_keep_alive (line 468) | fn try_keep_alive(&mut self, cx: &mut Context<'_>) {
  function can_write_head (line 474) | pub(super) fn can_write_head(&self) -> bool {
  function can_write_body (line 486) | pub(super) fn can_write_body(&self) -> bool {
  function can_buffer_body (line 494) | pub(super) fn can_buffer_body(&self) -> bool {
  function write_head (line 498) | pub(super) fn write_head(&mut self, head: MessageHead<T::Outgoing>, body...
  function encode_head (line 510) | fn encode_head(
  function fix_keep_alive (line 548) | fn fix_keep_alive(&mut self, head: &mut MessageHead<T::Outgoing>) {
  function enforce_version (line 572) | fn enforce_version(&mut self, head: &mut MessageHead<T::Outgoing>) {
  function write_body (line 594) | pub(super) fn write_body(&mut self, chunk: B) {
  function write_trailers (line 619) | pub(super) fn write_trailers(&mut self, trailers: HeaderMap) {
  function write_body_and_end (line 638) | pub(super) fn write_body_and_end(&mut self, chunk: B) {
  function end_body (line 658) | pub(super) fn end_body(&mut self) -> Result<()> {
  function on_parse_error (line 693) | fn on_parse_error(&mut self, err: Error) -> Result<()> {
  function poll_flush (line 712) | pub(super) fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<io::Re...
  function poll_shutdown (line 719) | pub(super) fn poll_shutdown(&mut self, cx: &mut Context<'_>) -> Poll<io:...
  function poll_drain_or_close_read (line 733) | pub(super) fn poll_drain_or_close_read(&mut self, cx: &mut Context<'_>) {
  function close_read (line 752) | pub(super) fn close_read(&mut self) {
  function close_write (line 757) | pub(super) fn close_write(&mut self) {
  function take_error (line 761) | pub(super) fn take_error(&mut self) -> Result<()> {
  function on_upgrade (line 770) | pub(super) fn on_upgrade(&mut self) -> upgrade::OnUpgrade {
  function fmt (line 777) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type State (line 788) | struct State {
    method fmt (line 837) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method close (line 909) | fn close(&mut self) {
    method close_read (line 916) | fn close_read(&mut self) {
    method close_write (line 922) | fn close_write(&mut self) {
    method wants_keep_alive (line 929) | fn wants_keep_alive(&self) -> bool {
    method try_keep_alive (line 933) | fn try_keep_alive<T: Http1Transaction>(&mut self) {
    method disable_keep_alive (line 955) | fn disable_keep_alive(&mut self) {
    method busy (line 959) | fn busy(&mut self) {
    method idle (line 966) | fn idle<T: Http1Transaction>(&mut self) {
    method is_idle (line 987) | fn is_idle(&self) -> bool {
    method is_read_closed (line 992) | fn is_read_closed(&self) -> bool {
    method is_write_closed (line 997) | fn is_write_closed(&self) -> bool {
    method prepare_upgrade (line 1002) | fn prepare_upgrade(&mut self) -> upgrade::OnUpgrade {
  type Reading (line 821) | enum Reading {
  type Writing (line 829) | enum Writing {
    method fmt (line 859) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type KA (line 879) | enum KA {
    method bitand_assign (line 870) | fn bitand_assign(&mut self, enabled: bool) {
    method idle (line 888) | fn idle(&mut self) {
    method busy (line 893) | fn busy(&mut self) {
    method disable (line 898) | fn disable(&mut self) {
    method status (line 903) | fn status(&self) -> KA {

FILE: src/client/core/proto/http1/decode.rs
  constant CHUNKED_EXTENSIONS_LIMIT (line 17) | const CHUNKED_EXTENSIONS_LIMIT: u64 = 1024 * 16;
  constant TRAILER_LIMIT (line 22) | const TRAILER_LIMIT: usize = 1024 * 16;
  type Decoder (line 29) | pub(crate) struct Decoder {
    method length (line 97) | fn length(x: u64) -> Decoder {
    method eof (line 104) | fn eof() -> Decoder {
    method chunked (line 111) | fn chunked(h1_max_headers: Option<usize>, h1_max_header_size: Option<u...
    method new (line 125) | pub(super) fn new(
    method is_eof (line 138) | pub(crate) fn is_eof(&self) -> bool {
    method decode (line 150) | pub(crate) fn decode<R: MemRead>(
    method decode_fut (line 254) | async fn decode_fut<R: MemRead>(&mut self, body: &mut R) -> Result<Fra...
    method fmt (line 260) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Kind (line 34) | enum Kind {
  type ChunkedState (line 67) | enum ChunkedState {
    method new (line 305) | fn new() -> ChunkedState {
    method step (line 310) | fn step<R: MemRead>(
    method read_start (line 343) | fn read_start<R: MemRead>(
    method read_size (line 375) | fn read_size<R: MemRead>(
    method read_size_lws (line 408) | fn read_size_lws<R: MemRead>(
    method read_extension (line 424) | fn read_extension<R: MemRead>(
    method read_size_lf (line 455) | fn read_size_lf<R: MemRead>(
    method read_body (line 477) | fn read_body<R: MemRead>(
    method read_body_cr (line 511) | fn read_body_cr<R: MemRead>(
    method read_body_lf (line 523) | fn read_body_lf<R: MemRead>(
    method read_trailer (line 536) | fn read_trailer<R: MemRead>(
    method read_trailer_lf (line 557) | fn read_trailer_lf<R: MemRead>(
    method read_end_cr (line 591) | fn read_end_cr<R: MemRead>(
    method read_end_lf (line 622) | fn read_end_lf<R: MemRead>(
  type StepArgs (line 83) | struct StepArgs<'a> {
  function decode_trailers (line 645) | fn decode_trailers(buf: &mut BytesMut, count: usize) -> Result<HeaderMap...
  type IncompleteBody (line 687) | struct IncompleteBody;
    method fmt (line 692) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method read_mem (line 708) | fn read_mem(&mut self, _: &mut Context<'_>, len: usize) -> Poll<io::Resu...
  method read_mem (line 722) | fn read_mem(&mut self, cx: &mut Context<'_>, len: usize) -> Poll<io::Res...
  method read_mem (line 731) | fn read_mem(&mut self, _: &mut Context<'_>, len: usize) -> Poll<io::Resu...
  function test_read_chunk_size (line 739) | async fn test_read_chunk_size() {
  function test_read_sized_early_eof (line 854) | async fn test_read_sized_early_eof() {
  function test_read_chunked_early_eof (line 872) | async fn test_read_chunked_early_eof() {
  function test_read_chunked_single_read (line 893) | async fn test_read_chunked_single_read() {
  function test_read_chunked_with_missing_zero_digit (line 907) | async fn test_read_chunked_with_missing_zero_digit() {
  function test_read_chunked_extensions_over_limit (line 927) | async fn test_read_chunked_extensions_over_limit() {
  function test_read_chunked_trailer_with_missing_lf (line 958) | async fn test_read_chunked_trailer_with_missing_lf() {
  function test_read_chunked_after_eof (line 967) | async fn test_read_chunked_after_eof() {
  function read_async (line 1003) | async fn read_async(mut decoder: Decoder, content: &[u8], block_at: usiz...
  function all_async_cases (line 1039) | async fn all_async_cases(content: &str, expected: &str, decoder: Decoder) {
  function test_read_length_async (line 1048) | async fn test_read_length_async() {
  function test_read_chunked_async (line 1054) | async fn test_read_chunked_async() {
  function test_read_eof_async (line 1061) | async fn test_read_eof_async() {
  function test_decode_trailers (line 1067) | fn test_decode_trailers() {
  function test_trailer_max_headers_enforced (line 1082) | async fn test_trailer_max_headers_enforced() {
  function test_trailer_max_header_size_huge_trailer (line 1112) | async fn test_trailer_max_header_size_huge_trailer() {
  function test_trailer_max_header_size_many_small_trailers (line 1140) | async fn test_trailer_max_header_size_many_small_trailers() {

FILE: src/client/core/proto/http1/dispatch.rs
  type Dispatcher (line 24) | pub(crate) struct Dispatcher<D, Bs: Body, I, T> {
  type Dispatch (line 32) | pub(crate) trait Dispatch {
    method poll_msg (line 39) | fn poll_msg(
    method recv_msg (line 44) | fn recv_msg(&mut self, msg: Result<(Self::RecvItem, Incoming)>) -> Res...
    method poll_ready (line 46) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), ()>>;
    method should_poll (line 48) | fn should_poll(&self) -> bool;
    type PollItem (line 552) | type PollItem = RequestHead;
    type PollBody (line 553) | type PollBody = B;
    type PollError (line 554) | type PollError = Infallible;
    type RecvItem (line 555) | type RecvItem = proto::ResponseHead;
    method poll_msg (line 557) | fn poll_msg(
    method recv_msg (line 594) | fn recv_msg(&mut self, msg: Result<(Self::RecvItem, Incoming)>) -> Res...
    method poll_ready (line 636) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), ()>> {
    method should_poll (line 650) | fn should_poll(&self) -> bool {
  type ClientRx (line 60) | type ClientRx<B> = dispatch::Receiver<Request<B>, http::Response<Incomin...
  function new (line 76) | pub(crate) fn new(dispatch: D, conn: Conn<I, Bs::Data, T>) -> Self {
  function into_inner (line 87) | pub(crate) fn into_inner(self) -> (I, Bytes, D) {
  function poll_catch (line 92) | fn poll_catch(
  function poll_inner (line 111) | fn poll_inner(
  function poll_loop (line 134) | fn poll_loop(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
  function poll_read (line 191) | fn poll_read(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
  function poll_read_head (line 267) | fn poll_read_head(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
  function poll_write (line 323) | fn poll_write(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
  function poll_flush (line 419) | fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<Result<()>> {
  function close (line 427) | fn close(&mut self) {
  function can_write_again (line 434) | fn can_write_again(&mut self) -> bool {
  function is_done (line 438) | fn is_done(&self) -> bool {
  type Output (line 469) | type Output = Result<Dispatched>;
  method poll (line 472) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...
  type OptGuard (line 481) | struct OptGuard<'a, T>(Pin<&'a mut Option<T>>, bool);
  function new (line 485) | fn new(pin: Pin<&'a mut Option<T>>) -> Self {
  function guard_mut (line 490) | fn guard_mut(&mut self) -> (Option<Pin<&mut T>>, &mut bool) {
  method drop (line 497) | fn drop(&mut self) {
  type SenderGuard (line 512) | struct SenderGuard(Option<body::Sender>);
    method set (line 516) | fn set(&mut self, sender: body::Sender) {
    method take (line 521) | fn take(&mut self) -> Option<body::Sender> {
  method drop (line 528) | fn drop(&mut self) {
  function new (line 539) | pub(crate) fn new(rx: ClientRx<B>) -> Client<B> {
  function client_read_bytes_before_writing_request (line 662) | fn client_read_bytes_before_writing_request() {
  function client_flushing_is_not_ready_for_next_request (line 695) | async fn client_flushing_is_not_ready_for_next_request() {
  function body_empty_chunks_ignored (line 729) | async fn body_empty_chunks_ignored() {

FILE: src/client/core/proto/http1/encode.rs
  type StaticBuf (line 17) | type StaticBuf = &'static [u8];
  type Encoder (line 21) | pub(crate) struct Encoder {
    method new (line 55) | fn new(kind: Kind) -> Encoder {
    method chunked (line 63) | pub(crate) fn chunked() -> Encoder {
    method length (line 68) | pub(crate) fn length(len: u64) -> Encoder {
    method into_chunked_with_trailing_fields (line 73) | pub(crate) fn into_chunked_with_trailing_fields(self, trailers: Vec<He...
    method is_eof (line 84) | pub(crate) fn is_eof(&self) -> bool {
    method is_last (line 89) | pub(crate) fn is_last(&self) -> bool {
    method is_close_delimited (line 94) | pub(crate) fn is_close_delimited(&self) -> bool {
    method is_chunked (line 99) | pub(crate) fn is_chunked(&self) -> bool {
    method end (line 103) | pub(crate) fn end<B>(&self) -> Result<Option<EncodedBuf<B>>, NotEof> {
    method encode (line 113) | pub(crate) fn encode<B>(&mut self, msg: B) -> EncodedBuf<B>
    method encode_trailers (line 143) | pub(crate) fn encode_trailers<B>(&self, trailers: HeaderMap) -> Option...
    method encode_and_end (line 191) | pub(super) fn encode_and_end<B>(&self, msg: B, dst: &mut WriteBuf<Enco...
  type EncodedBuf (line 27) | pub(crate) struct EncodedBuf<B> {
  type NotEof (line 32) | pub(crate) struct NotEof(u64);
    method fmt (line 390) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Kind (line 35) | enum Kind {
  type BufKind (line 45) | enum BufKind<B> {
  function is_valid_trailer_field (line 230) | fn is_valid_trailer_field(name: &HeaderName) -> bool {
  method remaining (line 253) | fn remaining(&self) -> usize {
  method chunk (line 264) | fn chunk(&self) -> &[u8] {
  method advance (line 275) | fn advance(&mut self, cnt: usize) {
  method chunks_vectored (line 286) | fn chunks_vectored<'t>(&'t self, dst: &mut [IoSlice<'t>]) -> usize {
  constant USIZE_BYTES (line 298) | const USIZE_BYTES: usize = 4;
  constant USIZE_BYTES (line 301) | const USIZE_BYTES: usize = 8;
  constant CHUNK_SIZE_MAX_BYTES (line 304) | const CHUNK_SIZE_MAX_BYTES: usize = USIZE_BYTES * 2;
  type ChunkSize (line 307) | struct ChunkSize {
    method new (line 314) | fn new(len: usize) -> ChunkSize {
    method fmt (line 346) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method write_str (line 355) | fn write_str(&mut self, num: &str) -> fmt::Result {
  method remaining (line 328) | fn remaining(&self) -> usize {
  method chunk (line 333) | fn chunk(&self) -> &[u8] {
  method advance (line 338) | fn advance(&mut self, cnt: usize) {
  function from (line 366) | fn from(buf: B) -> Self {
  function from (line 374) | fn from(buf: Take<B>) -> Self {
  function from (line 382) | fn from(buf: Chain<Chain<ChunkSize, B>, StaticBuf>) -> Self {
  function chunked (line 411) | fn chunked() {
  function length (line 436) | fn length() {
  function chunked_with_valid_trailers (line 460) | fn chunked_with_valid_trailers() {
  function chunked_with_multiple_trailer_headers (line 484) | fn chunked_with_multiple_trailer_headers() {
  function chunked_with_no_trailer_header (line 514) | fn chunked_with_no_trailer_header() {
  function chunked_with_invalid_trailers (line 531) | fn chunked_with_invalid_trailers() {
  function chunked_trailers_case_insensitive_matching (line 562) | fn chunked_trailers_case_insensitive_matching() {

FILE: src/client/core/proto/http1/ext.rs
  type ReasonPhrase (line 15) | pub struct ReasonPhrase(Bytes);
    method from_bytes_unchecked (line 24) | pub(crate) fn from_bytes_unchecked(reason: Bytes) -> Self {
    method as_ref (line 32) | fn as_ref(&self) -> &[u8] {

FILE: src/client/core/proto/http1/io.rs
  constant INIT_BUFFER_SIZE (line 16) | pub(crate) const INIT_BUFFER_SIZE: usize = 8192;
  constant MINIMUM_MAX_BUFFER_SIZE (line 19) | pub(crate) const MINIMUM_MAX_BUFFER_SIZE: usize = INIT_BUFFER_SIZE;
  constant DEFAULT_MAX_BUFFER_SIZE (line 24) | pub(crate) const DEFAULT_MAX_BUFFER_SIZE: usize = 8192 + 4096 * 100;
  constant MAX_BUF_LIST_BUFFERS (line 31) | const MAX_BUF_LIST_BUFFERS: usize = 16;
  type Buffered (line 33) | pub(crate) struct Buffered<T, B> {
  function fmt (line 47) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function new (line 60) | pub(crate) fn new(io: T) -> Buffered<T, B> {
  function set_max_buf_size (line 79) | pub(crate) fn set_max_buf_size(&mut self, max: usize) {
  function set_read_buf_exact_size (line 89) | pub(crate) fn set_read_buf_exact_size(&mut self, sz: usize) {
  function set_write_strategy_flatten (line 94) | pub(crate) fn set_write_strategy_flatten(&mut self) {
  function set_write_strategy_queue (line 102) | pub(crate) fn set_write_strategy_queue(&mut self) {
  function read_buf (line 110) | pub(crate) fn read_buf(&self) -> &[u8] {
  function read_buf_remaining_mut (line 117) | fn read_buf_remaining_mut(&self) -> usize {
  function can_headers_buf (line 126) | pub(crate) fn can_headers_buf(&self) -> bool {
  function headers_buf (line 131) | pub(crate) fn headers_buf(&mut self) -> &mut Vec<u8> {
  function write_buf (line 137) | pub(super) fn write_buf(&mut self) -> &mut WriteBuf<B> {
  function buffer (line 142) | pub(crate) fn buffer<BB: Buf + Into<B>>(&mut self, buf: BB) {
  function can_buffer (line 147) | pub(crate) fn can_buffer(&self) -> bool {
  function consume_leading_lines (line 151) | pub(crate) fn consume_leading_lines(&mut self) {
  function parse (line 164) | pub(super) fn parse<S>(
  function poll_read_from_io (line 212) | pub(crate) fn poll_read_from_io(&mut self, cx: &mut Context<'_>) -> Poll...
  function into_inner (line 234) | pub(crate) fn into_inner(self) -> (T, Bytes) {
  function io_mut (line 239) | pub(crate) fn io_mut(&mut self) -> &mut T {
  function is_read_blocked (line 244) | pub(crate) fn is_read_blocked(&self) -> bool {
  function poll_flush (line 248) | pub(crate) fn poll_flush(&mut self, cx: &mut Context<'_>) -> Poll<io::Re...
  function poll_flush_flattened (line 287) | fn poll_flush_flattened(&mut self, cx: &mut Context<'_>) -> Poll<io::Res...
  type MemRead (line 311) | pub(crate) trait MemRead {
    method read_mem (line 312) | fn read_mem(&mut self, cx: &mut Context<'_>, len: usize) -> Poll<io::R...
    method read_mem (line 320) | fn read_mem(&mut self, cx: &mut Context<'_>, len: usize) -> Poll<io::R...
  type ReadStrategy (line 332) | enum ReadStrategy {
    method with_max (line 342) | fn with_max(max: usize) -> ReadStrategy {
    method next (line 350) | fn next(&self) -> usize {
    method max (line 357) | fn max(&self) -> usize {
    method record (line 364) | fn record(&mut self, bytes_read: usize) {
  function incr_power_of_two (line 398) | fn incr_power_of_two(n: usize) -> usize {
  function prev_power_of_two (line 402) | fn prev_power_of_two(n: usize) -> usize {
  method default (line 410) | fn default() -> ReadStrategy {
  type Cursor (line 416) | pub(crate) struct Cursor<T> {
  function new (line 423) | pub(crate) fn new(bytes: T) -> Cursor<T> {
  function maybe_unshift (line 432) | fn maybe_unshift(&mut self, additional: usize) {
  function reset (line 447) | fn reset(&mut self) {
  function fmt (line 454) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method remaining (line 464) | fn remaining(&self) -> usize {
  method chunk (line 469) | fn chunk(&self) -> &[u8] {
  method advance (line 474) | fn advance(&mut self, cnt: usize) {
  type WriteBuf (line 481) | pub(super) struct WriteBuf<B> {
  function new (line 491) | fn new(strategy: WriteStrategy) -> WriteBuf<B> {
  function set_strategy (line 506) | fn set_strategy(&mut self, strategy: WriteStrategy) {
  function buffer (line 510) | pub(super) fn buffer<BB: Buf + Into<B>>(&mut self, mut buf: BB) {
  function can_buffer (line 548) | fn can_buffer(&self) -> bool {
  function headers_mut (line 558) | fn headers_mut(&mut self) -> &mut Cursor<Vec<u8>> {
  function fmt (line 565) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method remaining (line 575) | fn remaining(&self) -> usize {
  method chunk (line 580) | fn chunk(&self) -> &[u8] {
  method advance (line 590) | fn advance(&mut self, cnt: usize) {
  method chunks_vectored (line 605) | fn chunks_vectored<'t>(&'t self, dst: &mut [IoSlice<'t>]) -> usize {
  type WriteStrategy (line 612) | enum WriteStrategy {
  function flush (line 630) | fn flush(&mut self) -> impl std::future::Future<Output = io::Result<()>>...
  function parse_reads_until_blocked (line 636) | async fn parse_reads_until_blocked() {
  function read_strategy_adaptive_increments (line 676) | fn read_strategy_adaptive_increments() {
  function read_strategy_adaptive_decrements (line 702) | fn read_strategy_adaptive_decrements() {
  function read_strategy_adaptive_stays_the_same (line 733) | fn read_strategy_adaptive_stays_the_same() {
  function read_strategy_adaptive_max_fuzz (line 754) | fn read_strategy_adaptive_max_fuzz() {
  function write_buf_requires_non_empty_bufs (line 783) | fn write_buf_requires_non_empty_bufs() {
  function write_buf_flatten (line 791) | async fn write_buf_flatten() {
  function write_buf_flatten_partially_flushed (line 811) | fn write_buf_flatten_partially_flushed() {
  function write_buf_queue_disable_auto (line 846) | async fn write_buf_queue_disable_auto() {

FILE: src/client/core/proto/http1/role.rs
  constant AVERAGE_HEADER_SIZE (line 26) | const AVERAGE_HEADER_SIZE: usize = 30;
  constant DEFAULT_MAX_HEADERS (line 27) | pub(crate) const DEFAULT_MAX_HEADERS: usize = 100;
  function parse_headers (line 63) | pub(super) fn parse_headers<T>(
  function is_complete_fast (line 90) | fn is_complete_fast(bytes: &[u8], prev_len: usize) -> bool {
  type Client (line 107) | pub(crate) enum Client {}
    method decoder (line 309) | fn decoder(
    method set_length (line 377) | fn set_length(head: &mut RequestHead, body: Option<BodyLength>) -> Enc...
    method obs_fold_line (line 509) | fn obs_fold_line(all: &mut [u8], idx: &mut HeaderIndices) {
  type Incoming (line 110) | type Incoming = StatusCode;
  type Outgoing (line 112) | type Outgoing = RequestLine;
  constant LOG (line 115) | const LOG: &'static str = "{role=client}";
  method parse (line 117) | fn parse(
  method encode (line 258) | fn encode(msg: Encode<'_, Self::Outgoing>, dst: &mut Vec<u8>) -> Result<...
  method on_error (line 299) | fn on_error(_err: &Error) -> Option<MessageHead<Self::Outgoing>> {
  function set_content_length (line 569) | fn set_content_length(headers: &mut HeaderMap, len: u64) -> Encoder {
  type HeaderIndices (line 603) | struct HeaderIndices {
  function record_header_indices (line 608) | fn record_header_indices(
  function write_headers (line 634) | pub(crate) fn write_headers(headers: &HeaderMap, dst: &mut Vec<u8>) {
  function write_headers_original_case (line 643) | fn write_headers_original_case(
  type FastWrite (line 662) | struct FastWrite<'a>(&'a mut Vec<u8>);
  function write_str (line 666) | fn write_str(&mut self, s: &str) -> fmt::Result {
  function write_fmt (line 672) | fn write_fmt(&mut self, args: fmt::Arguments<'_>) -> fmt::Result {
  function extend (line 678) | fn extend(dst: &mut Vec<u8>, data: &[u8]) {

FILE: src/client/core/proto/http2.rs
  constant SPEC_WINDOW_SIZE (line 30) | const SPEC_WINDOW_SIZE: u32 = 65_535;
  constant DEFAULT_CONN_WINDOW (line 35) | const DEFAULT_CONN_WINDOW: u32 = 1024 * 1024 * 5;
  constant DEFAULT_STREAM_WINDOW (line 36) | const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024 * 2;
  constant DEFAULT_MAX_FRAME_SIZE (line 37) | const DEFAULT_MAX_FRAME_SIZE: u32 = 1024 * 16;
  constant DEFAULT_MAX_SEND_BUF_SIZE (line 38) | const DEFAULT_MAX_SEND_BUF_SIZE: usize = 1024 * 1024;
  constant DEFAULT_MAX_HEADER_LIST_SIZE (line 39) | const DEFAULT_MAX_HEADER_LIST_SIZE: u32 = 1024 * 16;
  constant DEFAULT_INITIAL_MAX_SEND_STREAMS (line 48) | const DEFAULT_INITIAL_MAX_SEND_STREAMS: usize = 100;
  function strip_connection_headers (line 61) | fn strip_connection_headers(headers: &mut HeaderMap, is_request: bool) {
  function new (line 119) | fn new(stream: S, body_tx: SendStream<SendBuf<S::Data>>) -> PipeToSendSt...
  function send_reset (line 128) | fn send_reset(self: Pin<&mut Self>, reason: http2::Reason) {
  type Output (line 138) | type Output = Result<()>;
  method poll (line 140) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  type SendStreamExt (line 216) | trait SendStreamExt {
    method on_user_err (line 217) | fn on_user_err<E>(&mut self, err: E) -> Error
    method send_eos_frame (line 221) | fn send_eos_frame(&mut self) -> Result<()>;
    method on_user_err (line 225) | fn on_user_err<E>(&mut self, err: E) -> Error
    method send_eos_frame (line 235) | fn send_eos_frame(&mut self) -> Result<()> {
  type SendBuf (line 243) | enum SendBuf<B> {
  method remaining (line 251) | fn remaining(&self) -> usize {
  method chunk (line 260) | fn chunk(&self) -> &[u8] {
  method advance (line 269) | fn advance(&mut self, cnt: usize) {
  method chunks_vectored (line 277) | fn chunks_vectored<'a>(&'a self, dst: &mut [IoSlice<'a>]) -> usize {
  type H2Upgraded (line 286) | struct H2Upgraded<B>
  method poll_read (line 300) | fn poll_read(
  method poll_write (line 340) | fn poll_write(
  method poll_flush (line 378) | fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<io::R...
  method poll_shutdown (line 382) | fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll...
  function h2_to_io_error (line 404) | fn h2_to_io_error(e: http2::Error) -> std::io::Error {
  type Http2OptionsBuilder (line 416) | pub struct Http2OptionsBuilder {
    method initial_window_size (line 505) | pub fn initial_window_size(mut self, sz: impl Into<Option<u32>>) -> Se...
    method initial_connection_window_size (line 519) | pub fn initial_connection_window_size(mut self, sz: impl Into<Option<u...
    method initial_max_send_streams (line 538) | pub fn initial_max_send_streams(mut self, initial: impl Into<Option<us...
    method initial_stream_id (line 547) | pub fn initial_stream_id(mut self, id: impl Into<Option<u32>>) -> Self {
    method adaptive_window (line 560) | pub fn adaptive_window(mut self, enabled: bool) -> Self {
    method max_frame_size (line 573) | pub fn max_frame_size(mut self, sz: impl Into<Option<u32>>) -> Self {
    method max_header_list_size (line 584) | pub fn max_header_list_size(mut self, max: u32) -> Self {
    method header_table_size (line 597) | pub fn header_table_size(mut self, size: impl Into<Option<u32>>) -> Se...
    method max_concurrent_streams (line 628) | pub fn max_concurrent_streams(mut self, max: impl Into<Option<u32>>) -...
    method keep_alive_interval (line 642) | pub fn keep_alive_interval(mut self, interval: impl Into<Option<Durati...
    method keep_alive_timeout (line 654) | pub fn keep_alive_timeout(mut self, timeout: Duration) -> Self {
    method keep_alive_while_idle (line 668) | pub fn keep_alive_while_idle(mut self, enabled: bool) -> Self {
    method enable_push (line 677) | pub fn enable_push(mut self, opt: bool) -> Self {
    method enable_connect_protocol (line 684) | pub fn enable_connect_protocol(mut self, opt: bool) -> Self {
    method no_rfc7540_priorities (line 692) | pub fn no_rfc7540_priorities(mut self, opt: bool) -> Self {
    method max_concurrent_reset_streams (line 706) | pub fn max_concurrent_reset_streams(mut self, max: usize) -> Self {
    method max_send_buf_size (line 719) | pub fn max_send_buf_size(mut self, max: usize) -> Self {
    method max_pending_accept_reset_streams (line 729) | pub fn max_pending_accept_reset_streams(mut self, max: impl Into<Optio...
    method headers_stream_dependency (line 742) | pub fn headers_stream_dependency<T>(mut self, stream_dependency: T) ->...
    method headers_pseudo_order (line 758) | pub fn headers_pseudo_order<T>(mut self, headers_pseudo_order: T) -> Self
    method settings_order (line 773) | pub fn settings_order<T>(mut self, settings_order: T) -> Self
    method priorities (line 793) | pub fn priorities<T>(mut self, priorities: T) -> Self
    method build (line 805) | pub fn build(self) -> Http2Options {
  type Http2Options (line 427) | pub struct Http2Options {
    method builder (line 812) | pub fn builder() -> Http2OptionsBuilder {
  method default (line 828) | fn default() -> Self {
  function setup_duplex_test_server (line 866) | fn setup_duplex_test_server() -> (tokio::io::DuplexStream, tokio::io::Du...
  function h2_pipe_task_cancelled_on_response_future_drop (line 873) | async fn h2_pipe_task_cancelled_on_response_future_drop() {

FILE: src/client/core/proto/http2/client.rs
  type ClientRx (line 46) | type ClientRx<B> = dispatch::Receiver<Request<B>, Response<Incoming>>;
  type ConnDropRef (line 50) | type ConnDropRef = mpsc::Sender<Infallible>;
  type ConnEof (line 54) | type ConnEof = oneshot::Receiver<Infallible>;
  function handshake (line 56) | pub(crate) async fn handshake<T, B, E>(
  type Output (line 130) | type Output = Result<(), http2::Error>;
  method poll (line 132) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  type Output (line 170) | type Output = Result<(), ()>;
  method poll (line 172) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  method is_terminated (line 194) | fn is_terminated(&self) -> bool {
  function new (line 222) | fn new(
  type Output (line 240) | type Output = ();
  method poll (line 242) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  type Output (line 295) | type Output = ();
  method poll (line 297) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> std::task::Poll<S...
  type FutCtx (line 308) | struct FutCtx<B>
  type ClientTask (line 322) | pub(crate) struct ClientTask<B, E, T>
  type Output (line 357) | type Output = ();
  method poll (line 359) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> std::task::Poll<S...
  function poll_pipe (line 406) | fn poll_pipe(&mut self, f: FutCtx<B>, cx: &mut Context<'_>) {
  function cancel (line 478) | pub(crate) fn cancel(self: Pin<&mut Self>) {
  type Output (line 490) | type Output = Result<Response<body::Incoming>, (Error, Option<Request<B>...
  method poll (line 492) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  type Output (line 558) | type Output = Result<Dispatched>;
  method poll (line 560) | fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Ou...

FILE: src/client/core/proto/http2/ping.rs
  type WindowSize (line 39) | type WindowSize = u32;
  function channel (line 41) | pub(super) fn channel(ping_pong: PingPong, config: Config, timer: Time) ...
  type Config (line 97) | pub(crate) struct Config {
    method new (line 186) | pub(crate) fn new(
    method is_enabled (line 206) | pub(super) fn is_enabled(&self) -> bool {
  type Recorder (line 109) | pub(crate) struct Recorder {
    method disabled (line 215) | pub(super) fn disabled() -> Recorder {
    method record_data (line 219) | pub(crate) fn record_data(&self, len: usize) {
    method record_non_data (line 249) | pub(crate) fn record_non_data(&self) {
    method for_stream (line 260) | pub(super) fn for_stream(self, stream: &http2::RecvStream) -> Self {
    method ensure_not_timed_out (line 268) | pub(super) fn ensure_not_timed_out(&self) -> Result<()> {
  type Ponger (line 113) | pub(super) struct Ponger {
    method is_idle (line 352) | fn is_idle(&self) -> bool {
  type Shared (line 119) | struct Shared {
    method send_ping (line 360) | fn send_ping(&mut self) {
    method is_ping_sent (line 373) | fn is_ping_sent(&self) -> bool {
    method update_last_read_at (line 378) | fn update_last_read_at(&mut self) {
    method last_read_at (line 385) | fn last_read_at(&self) -> Instant {
  type Bdp (line 140) | struct Bdp {
    method calculate (line 396) | fn calculate(&mut self, bytes: usize, rtt: Duration) -> Option<WindowS...
    method stabilize_delay (line 440) | fn stabilize_delay(&mut self) {
  type KeepAlive (line 155) | struct KeepAlive {
    method maybe_schedule (line 462) | fn maybe_schedule(&mut self, is_idle: bool, shared: &Shared) {
    method schedule (line 481) | fn schedule(&mut self, shared: &Shared) {
    method maybe_ping (line 487) | fn maybe_ping(&mut self, cx: &mut task::Context<'_>, is_idle: bool, sh...
    method maybe_timeout (line 513) | fn maybe_timeout(&mut self, cx: &mut task::Context<'_>) -> Result<(), ...
  type KeepAliveState (line 168) | enum KeepAliveState {
  type Ponged (line 174) | pub(super) enum Ponged {
  type KeepAliveTimedOut (line 180) | pub(super) struct KeepAliveTimedOut;
    method crate_error (line 530) | pub(super) fn crate_error(self) -> Error {
    method fmt (line 536) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 542) | fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
  type Output (line 283) | type Output = Ponged;
  method poll (line 286) | fn poll(mut self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Se...
  constant BDP_LIMIT (line 393) | const BDP_LIMIT: usize = 1024 * 1024 * 16;
  function seconds (line 453) | fn seconds(dur: Duration) -> f64 {

FILE: src/client/core/rt.rs
  type Executor (line 22) | pub trait Executor<Fut> {
    method execute (line 24) | fn execute(&self, fut: Fut);

FILE: src/client/core/rt/bounds.rs
  type Http2ClientConnExec (line 23) | pub trait Http2ClientConnExec<B, T>: sealed_client::Sealed<(B, T)>
    method execute_h2_future (line 30) | fn execute_h2_future(&mut self, future: H2ClientFuture<B, T>);
  method execute_h2_future (line 42) | fn execute_h2_future(&mut self, future: H2ClientFuture<B, T>) {
  type Sealed (line 58) | pub trait Sealed<X> {}

FILE: src/client/core/rt/timer.rs
  type Timer (line 12) | pub trait Timer {
    method sleep (line 14) | fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>>;
    method sleep_until (line 17) | fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sleep>>;
    method now (line 22) | fn now(&self) -> Instant {
    method reset (line 27) | fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadline: Instant) {
    method sleep (line 86) | fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>> {
    method now (line 95) | fn now(&self) -> Instant {
    method sleep_until (line 102) | fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sleep>> {
    method reset (line 111) | fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadline: Instant) {
  type Sleep (line 33) | pub trait Sleep: Send + Sync + Future<Output = ()> {
    method __type_id (line 36) | fn __type_id(&self, _: private::Sealed) -> TypeId
  type Time (line 46) | pub enum Time {
  function is (line 57) | pub fn is<T>(&self) -> bool
  function downcast_mut_pin (line 65) | pub fn downcast_mut_pin<T>(self: Pin<&mut Self>) -> Option<Pin<&mut T>>
  type Sealed (line 122) | pub struct Sealed {}

FILE: src/client/core/rt/tokio.rs
  type TokioExecutor (line 16) | pub struct TokioExecutor {}
    method execute (line 40) | fn execute(&self, fut: Fut) {
    method new (line 47) | pub fn new() -> Self {
  type TokioTimer (line 21) | pub struct TokioTimer;
    method new (line 80) | pub fn new() -> Self {
  method sleep (line 55) | fn sleep(&self, duration: Duration) -> Pin<Box<dyn Sleep>> {
  method sleep_until (line 61) | fn sleep_until(&self, deadline: Instant) -> Pin<Box<dyn Sleep>> {
  method now (line 67) | fn now(&self) -> Instant {
  method reset (line 71) | fn reset(&self, sleep: &mut Pin<Box<dyn Sleep>>, new_deadline: Instant) {
  type Output (line 88) | type Output = ();
  method poll (line 91) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  method reset (line 100) | fn reset(self: Pin<&mut Self>, deadline: Instant) {

FILE: src/client/core/upgrade.rs
  type Upgraded (line 53) | pub struct Upgraded {
    method new (line 96) | pub(crate) fn new<T>(io: T, read_buf: Bytes) -> Self
    method fmt (line 153) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type OnUpgrade (line 61) | pub struct OnUpgrade {
    method none (line 162) | pub(super) fn none() -> Self {
    method is_none (line 167) | pub(super) fn is_none(&self) -> bool {
  function on (line 74) | pub fn on<T: sealed::CanUpgrade>(msg: T) -> OnUpgrade {
  type Pending (line 78) | pub(crate) struct Pending {
    method fulfill (line 191) | pub(super) fn fulfill(self, upgraded: Upgraded) {
    method manual (line 199) | pub(super) fn manual(self) {
  function pending (line 82) | pub(crate) fn pending() -> (Pending, OnUpgrade) {
  method poll_read (line 108) | fn poll_read(
  method poll_write (line 119) | fn poll_write(
  method poll_write_vectored (line 128) | fn poll_write_vectored(
  method poll_flush (line 137) | fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io...
  method poll_shutdown (line 142) | fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll...
  method is_write_vectored (line 147) | fn is_write_vectored(&self) -> bool {
  type Output (line 173) | type Output = Result<Upgraded, Error>;
  method poll (line 175) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  type UpgradeExpected (line 212) | struct UpgradeExpected;
    method fmt (line 215) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Io (line 224) | trait Io: AsyncRead + AsyncWrite + Unpin + 'static {}
  type CanUpgrade (line 231) | pub trait CanUpgrade {
    method on_upgrade (line 232) | fn on_upgrade(self) -> OnUpgrade;
    method on_upgrade (line 236) | fn on_upgrade(mut self) -> OnUpgrade {
    method on_upgrade (line 244) | fn on_upgrade(self) -> OnUpgrade {
    method on_upgrade (line 252) | fn on_upgrade(mut self) -> OnUpgrade {
    method on_upgrade (line 260) | fn on_upgrade(self) -> OnUpgrade {
  type Rewind (line 280) | pub(crate) struct Rewind<T> {
  function new_buffered (line 287) | pub(crate) fn new_buffered(io: T, buf: Bytes) -> Self {
  function rewind (line 295) | pub(crate) fn rewind(&mut self, bs: Bytes) {
  method poll_read (line 305) | fn poll_read(
  method poll_write (line 334) | fn poll_write(
  method poll_write_vectored (line 343) | fn poll_write_vectored(
  method poll_flush (line 352) | fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<io...
  method poll_shutdown (line 357) | fn poll_shutdown(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll...
  method is_write_vectored (line 362) | fn is_write_vectored(&self) -> bool {
  function partial_rewind (line 375) | async fn partial_rewind() {
  function full_rewind (line 397) | async fn full_rewind() {

FILE: src/client/emulate.rs
  type IntoEmulation (line 16) | pub trait IntoEmulation {
    method into_emulation (line 18) | fn into_emulation(self) -> Emulation;
    method into_emulation (line 119) | fn into_emulation(self) -> Emulation {
  type EmulationBuilder (line 24) | pub struct EmulationBuilder {
    method http1_options (line 57) | pub fn http1_options(mut self, opts: Http1Options) -> Self {
    method http2_options (line 64) | pub fn http2_options(mut self, opts: Http2Options) -> Self {
    method tls_options (line 71) | pub fn tls_options(mut self, opts: TlsOptions) -> Self {
    method headers (line 78) | pub fn headers(mut self, src: HeaderMap) -> Self {
    method orig_headers (line 85) | pub fn orig_headers(mut self, src: OrigHeaderMap) -> Self {
    method build (line 92) | pub fn build(mut self, group: Group) -> Emulation {
  type Emulation (line 33) | pub struct Emulation {
    method builder (line 103) | pub fn builder() -> EmulationBuilder {

FILE: src/client/future.rs
  type Output (line 29) | type Output = Result<Response, Error>;
  method poll (line 31) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  function test_future_size (line 67) | fn test_future_size() {
  function error_has_url (line 73) | async fn error_has_url() {

FILE: src/client/group.rs
  type Group (line 61) | pub struct Group(BTreeMap<GroupId, GroupPart>);
    method named (line 66) | pub fn named<N: Into<Cow<'static, str>>>(name: N) -> Self {
    method number (line 74) | pub fn number<V: Into<u64>>(value: V) -> Self {
    method uri (line 83) | pub(crate) fn uri(&mut self, uri: Uri) -> &mut Self {
    method version (line 89) | pub(crate) fn version(&mut self, version: Option<Version>) -> &mut Self {
    method proxy (line 95) | pub(crate) fn proxy(&mut self, proxy: Option<Matcher>) -> &mut Self {
    method socket_bind (line 101) | pub(crate) fn socket_bind(&mut self, opts: Option<SocketBindOptions>) ...
    method request (line 107) | pub(crate) fn request(&mut self, group: Group) -> &mut Self {
    method emulate (line 113) | pub(crate) fn emulate(&mut self, group: Group) -> &mut Self {
    method extend (line 118) | fn extend<T: Into<Option<GroupPart>>>(&mut self, id: GroupId, entry: T...
    method from (line 128) | fn from(value: u64) -> Self {
    method from (line 135) | fn from(value: &'static str) -> Self {
    method from (line 142) | fn from(value: String) -> Self {
    method from (line 149) | fn from(value: Cow<'static, str>) -> Self {
  function test_group_identity_invariance (line 161) | fn test_group_identity_invariance() {

FILE: src/client/layer/client.rs
  type BoxSendFuture (line 63) | type BoxSendFuture = Pin<Box<dyn Future<Output = ()> + Send>>;
  type HttpClient (line 70) | pub(crate) struct HttpClient<C, B> {
  type Config (line 82) | struct Config {
  type Error (line 89) | pub struct Error {
    method fmt (line 994) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method new (line 1006) | fn new<E>(kind: ErrorKind, error: E) -> Self
    method is_connect (line 1035) | pub fn is_connect(&self) -> bool {
    method is_proxy_connect (line 1041) | pub fn is_proxy_connect(&self) -> bool {
    method with_connect_info (line 1046) | fn with_connect_info(self, connect_info: Connected) -> Self {
    method is_canceled (line 1054) | fn is_canceled(&self) -> bool {
    method tx (line 1059) | fn tx(src: core::Error) -> Self {
    method closed (line 1064) | fn closed(src: core::Error) -> Self {
  type ErrorKind (line 97) | enum ErrorKind {
  type ClientConnectError (line 108) | enum ClientConnectError {
  type TrySendError (line 114) | enum TrySendError<B> {
  function builder (line 145) | pub fn builder<E>(executor: E) -> Builder
  function request (line 163) | fn request(
  function send_request (line 216) | async fn send_request(
  function try_send_request (line 249) | async fn try_send_request(
  function connection_for (line 384) | async fn connection_for(
  function one_connection_for (line 407) | async fn one_connection_for(
  function connect_to (line 498) | fn connect_to(
  type Response (line 689) | type Response = Response<Incoming>;
  type Error (line 690) | type Error = BoxError;
    method fmt (line 994) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method new (line 1006) | fn new<E>(kind: ErrorKind, error: E) -> Self
    method is_connect (line 1035) | pub fn is_connect(&self) -> bool {
    method is_proxy_connect (line 1041) | pub fn is_proxy_connect(&self) -> bool {
    method with_connect_info (line 1046) | fn with_connect_info(self, connect_info: Connected) -> Self {
    method is_canceled (line 1054) | fn is_canceled(&self) -> bool {
    method tx (line 1059) | fn tx(src: core::Error) -> Self {
    method closed (line 1064) | fn closed(src: core::Error) -> Self {
  type Future (line 691) | type Future = BoxFuture<'static, Result<Response<Incoming>, Self::Error>>;
  function poll_ready (line 693) | fn poll_ready(&mut self, _: &mut task::Context<'_>) -> Poll<Result<(), S...
  function call (line 697) | fn call(&mut self, req: Request<B>) -> Self::Future {
  method clone (line 703) | fn clone(&self) -> HttpClient<C, B> {
  type PoolClient (line 718) | struct PoolClient<B> {
  type PoolTx (line 723) | enum PoolTx<B> {
  function poll_ready (line 732) | fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll<Result<(), ...
  function is_http1 (line 740) | fn is_http1(&self) -> bool {
  function is_http2 (line 745) | fn is_http2(&self) -> bool {
  function is_poisoned (line 753) | fn is_poisoned(&self) -> bool {
  function is_ready (line 758) | fn is_ready(&self) -> bool {
  function try_send_request (line 768) | fn try_send_request(
  function is_open (line 787) | fn is_open(&self) -> bool {
  function reserve (line 791) | fn reserve(self) -> pool::Reservation<Self> {
  function can_share (line 813) | fn can_share(&self) -> bool {
  type Builder (line 820) | pub struct Builder {
    method new (line 835) | pub fn new<E>(executor: E) -> Self
    method pool_idle_timeout (line 866) | pub fn pool_idle_timeout<D>(mut self, val: D) -> Self
    method pool_max_idle_per_host (line 878) | pub fn pool_max_idle_per_host(mut self, max_idle: usize) -> Self {
    method pool_max_size (line 887) | pub fn pool_max_size(mut self, max_size: impl Into<Option<NonZeroUsize...
    method http2_only (line 903) | pub fn http2_only(mut self, val: bool) -> Self {
    method http2_timer (line 915) | pub fn http2_timer<M>(mut self, timer: M) -> Self
    method http1_options (line 925) | pub fn http1_options<O>(mut self, opts: O) -> Self
    method http2_options (line 938) | pub fn http2_options<O>(mut self, opts: O) -> Self
    method pool_timer (line 950) | pub fn pool_timer<M>(mut self, timer: M) -> Self
    method cookie_store (line 961) | pub fn cookie_store(mut self, cookie_store: Option<Arc<dyn CookieStore...
    method build (line 967) | pub fn build<C, B>(self, connector: C) -> HttpClient<C, B>
  method source (line 1000) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  function origin_form (line 1069) | fn origin_form(uri: &mut Uri) {
  function absolute_form (line 1084) | fn absolute_form(uri: &mut Uri) {
  function authority_form (line 1092) | fn authority_form(uri: &mut Uri) {
  function normalize_uri (line 1112) | fn normalize_uri<B>(req: &mut Request<B>, is_http_connect: bool) -> Resu...
  function generate_host_header (line 1141) | fn generate_host_header(uri: &Uri) -> HeaderValue {
  function set_scheme (line 1156) | fn set_scheme(uri: &mut Uri, scheme: Scheme) {
  function is_schema_secure (line 1168) | fn is_schema_secure(uri: &Uri) -> bool {

FILE: src/client/layer/client/exec.rs
  type BoxSendFuture (line 5) | pub(crate) type BoxSendFuture = Pin<Box<dyn Future<Output = ()> + Send>>;
  type Exec (line 9) | pub struct Exec(Arc<dyn Executor<BoxSendFuture> + Send + Sync>);
    method new (line 14) | pub(super) fn new<E>(inner: E) -> Self
    method execute (line 26) | fn execute(&self, fut: F) {

FILE: src/client/layer/client/lazy.rs
  type Started (line 9) | pub(crate) trait Started: Future {
    method started (line 10) | fn started(&self) -> bool;
    method started (line 46) | fn started(&self) -> bool {
  function lazy (line 13) | pub(crate) fn lazy<F, R>(func: F) -> Lazy<F, R>
  type Output (line 59) | type Output = R::Output;
  method poll (line 61) | fn poll(self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Self::...

FILE: src/client/layer/client/pool.rs
  type Pool (line 25) | pub struct Pool<T, K: Key> {
  type Poolable (line 35) | pub trait Poolable: Unpin + Send + Sized + 'static {
    method is_open (line 36) | fn is_open(&self) -> bool;
    method reserve (line 40) | fn reserve(self) -> Reservation<Self>;
    method can_share (line 41) | fn can_share(&self) -> bool;
    method is_open (line 830) | fn is_open(&self) -> bool {
    method reserve (line 834) | fn reserve(self) -> Reservation<Self> {
    method can_share (line 838) | fn can_share(&self) -> bool {
    method is_open (line 1063) | fn is_open(&self) -> bool {
    method reserve (line 1067) | fn reserve(self) -> Reservation<Self> {
    method can_share (line 1071) | fn can_share(&self) -> bool {
  type Key (line 44) | pub trait Key: Eq + Hash + Clone + Debug + Unpin + Send + 'static {}
  type Ver (line 51) | pub enum Ver {
  type Reservation (line 62) | pub enum Reservation<T> {
  type PoolInner (line 74) | struct PoolInner<T, K: Eq + Hash> {
  type WeakOpt (line 103) | struct WeakOpt<T>(Option<Weak<T>>);
  type Config (line 106) | pub struct Config {
    method is_enabled (line 113) | pub fn is_enabled(&self) -> bool {
  function new (line 119) | pub fn new<E>(config: Config, executor: E, timer: Time) -> Pool<T, K>
  function is_enabled (line 143) | pub(crate) fn is_enabled(&self) -> bool {
  function checkout (line 151) | pub fn checkout(&self, key: K) -> Checkout<T, K> {
  function connecting (line 161) | pub fn connecting(&self, key: K, ver: Ver) -> Option<Connecting<T, K>> {
  function pooled (line 187) | pub fn pooled(&self, mut connecting: Connecting<T, K>, value: T) -> Pool...
  function reuse (line 228) | fn reuse(&self, key: &K, value: T) -> Pooled<T, K> {
  type IdlePopper (line 255) | struct IdlePopper<'a, T, K> {
  function pop (line 262) | fn pop(self, expiration: &Expiration, now: Instant) -> Option<Idle<T>> {
  function now (line 303) | fn now(&self) -> Instant {
  function put (line 307) | fn put(&mut self, key: &K, value: T, __pool_ref: &Arc<Mutex<PoolInner<T,...
  function connected (line 377) | fn connected(&mut self, key: &K) {
  function spawn_idle_interval (line 386) | fn spawn_idle_interval(&mut self, pool_ref: &Arc<Mutex<PoolInner<T, K>>>) {
  function clean_waiters (line 437) | fn clean_waiters(&mut self, key: &K) {
  function clear_expired (line 451) | fn clear_expired(&mut self) {
  method clone (line 487) | fn clone(&self) -> Pool<T, K> {
  type Pooled (line 496) | pub struct Pooled<T: Poolable, K: Key> {
  function is_reused (line 504) | pub fn is_reused(&self) -> bool {
  function is_pool_enabled (line 508) | pub fn is_pool_enabled(&self) -> bool {
  function as_ref (line 512) | fn as_ref(&self) -> &T {
  function as_mut (line 516) | fn as_mut(&mut self) -> &mut T {
  type Target (line 522) | type Target = T;
  method deref (line 523) | fn deref(&self) -> &T {
  method deref_mut (line 529) | fn deref_mut(&mut self) -> &mut T {
  method drop (line 535) | fn drop(&mut self) {
  method fmt (line 556) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Idle (line 561) | struct Idle<T> {
  type Checkout (line 566) | pub struct Checkout<T, K: Key> {
  type Error (line 574) | pub enum Error {
    method is_canceled (line 581) | pub(super) fn is_canceled(&self) -> bool {
    method fmt (line 587) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function poll_waiter (line 599) | fn poll_waiter(
  function checkout (line 625) | fn checkout(&mut self, cx: &mut task::Context<'_>) -> Option<Pooled<T, K...
  type Output (line 677) | type Output = Result<Pooled<T, K>, Error>;
  method poll (line 679) | fn poll(mut self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Se...
  method drop (line 697) | fn drop(&mut self) {
  type Connecting (line 707) | pub struct Connecting<T: Poolable, K: Key> {
  function alpn_h2 (line 713) | pub fn alpn_h2(self, pool: &Pool<T, K>) -> Option<Self> {
  method drop (line 724) | fn drop(&mut self) {
  type Expiration (line 733) | struct Expiration(Option<Duration>);
    method new (line 736) | fn new(dur: Option<Duration>) -> Expiration {
    method expires (line 740) | fn expires(&self, instant: Instant, now: Instant) -> bool {
  type IdleTask (line 749) | struct IdleTask<T, K: Key> {
  function run (line 760) | async fn run(self) {
  function none (line 790) | fn none() -> Self {
  function downgrade (line 794) | fn downgrade(arc: &Arc<T>) -> Self {
  function upgrade (line 798) | fn upgrade(&self) -> Option<Arc<T>> {
  type KeyImpl (line 823) | struct KeyImpl(http::uri::Scheme, http::uri::Authority);
  type Uniq (line 827) | struct Uniq<T>(T);
  function c (line 843) | fn c<T: Poolable, K: Key>(key: K) -> Connecting<T, K> {
  function host_key (line 850) | fn host_key(s: &str) -> KeyImpl {
  function pool_no_timer (line 854) | fn pool_no_timer<T, K: Key>() -> Pool<T, K> {
  function pool_max_idle_no_timer (line 858) | fn pool_max_idle_no_timer<T, K: Key>(max_idle: usize) -> Pool<T, K> {
  function locked (line 871) | fn locked(&self) -> MutexGuard<'_, super::PoolInner<T, K>> {
  function test_pool_checkout_smoke (line 877) | async fn test_pool_checkout_smoke() {
  type PollOnce (line 891) | struct PollOnce<'a, F>(&'a mut F);
  type Output (line 897) | type Output = Option<()>;
  method poll (line 899) | fn poll(mut self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Se...
  function test_pool_checkout_returns_none_if_expired (line 909) | async fn test_pool_checkout_returns_none_if_expired() {
  function test_pool_checkout_removes_expired (line 924) | async fn test_pool_checkout_removes_expired() {
  function test_pool_max_idle_per_host (line 947) | fn test_pool_max_idle_per_host() {
  function test_pool_timer_removes_expired_realtime (line 963) | async fn test_pool_timer_removes_expired_realtime() {
  function test_pool_timer_removes_expired_faketime (line 968) | async fn test_pool_timer_removes_expired_faketime() {
  function test_pool_timer_removes_expired_inner (line 972) | async fn test_pool_timer_removes_expired_inner() {
  function test_pool_checkout_task_unparked (line 1010) | async fn test_pool_checkout_task_unparked() {
  function test_pool_checkout_drop_cleans_up_waiters (line 1031) | async fn test_pool_checkout_drop_cleans_up_waiters() {
  type CanClose (line 1056) | struct CanClose {
  function pooled_drop_if_closed_doesnt_reinsert (line 1077) | fn pooled_drop_if_closed_doesnt_reinsert() {
  function test_pool_size_limit (line 1092) | async fn test_pool_size_limit() {

FILE: src/client/layer/config.rs
  type DefaultHeaders (line 26) | pub(crate) struct DefaultHeaders;
  type RequestOptions (line 32) | pub(crate) struct RequestOptions {
  type Config (line 43) | struct Config {
  type ConfigServiceLayer (line 51) | pub struct ConfigServiceLayer {
    method new (line 74) | pub fn new(https_only: bool, headers: HeaderMap, orig_headers: OrigHea...
    type Service (line 88) | type Service = ConfigService<S>;
    method layer (line 91) | fn layer(&self, inner: S) -> Self::Service {
  type ConfigService (line 57) | pub struct ConfigService<S> {
  type Response (line 106) | type Response = S::Response;
  type Error (line 107) | type Error = S::Error;
  type Future (line 108) | type Future = Either<S::Future, Ready<Result<Self::Response, Self::Error...
  function poll_ready (line 111) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 115) | fn call(&mut self, mut req: Request<ReqBody>) -> Self::Future {

FILE: src/client/layer/decoder.rs
  type AcceptEncoding (line 18) | pub(crate) struct AcceptEncoding {
  type DecompressionLayer (line 31) | pub struct DecompressionLayer {
    method new (line 63) | pub fn new(accept: AcceptEncoding) -> Self {
    type Service (line 69) | type Service = Decompression<S>;
    method layer (line 72) | fn layer(&self, service: S) -> Self::Service {
  type Decompression (line 37) | pub struct Decompression<S>(Option<decompression::Decompression<S>>);
  method default (line 42) | fn default() -> AcceptEncoding {
  constant BUG_MSG (line 83) | const BUG_MSG: &str = "[BUG] Decompression service not initialized; bug ...
  function accept_in_place (line 85) | fn accept_in_place(
  type Response (line 119) | type Response = Response<DecompressionBody<ResBody>>;
  type Error (line 120) | type Error = S::Error;
  type Future (line 121) | type Future = ResponseFuture<S::Future>;
  function poll_ready (line 124) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 128) | fn call(&mut self, req: Request<ReqBody>) -> Self::Future {

FILE: src/client/layer/redirect.rs
  type BodyRepr (line 19) | enum BodyRepr<B> {
  function take (line 29) | fn take(&mut self) -> Option<B> {
  function try_clone_from (line 40) | fn try_clone_from<P, E>(&mut self, body: &B, policy: &P)
  type FollowRedirectLayer (line 59) | pub struct FollowRedirectLayer<P> {
  function with_policy (line 66) | pub fn with_policy(policy: P) -> Self {
  type Service (line 76) | type Service = FollowRedirect<S, P>;
  function layer (line 79) | fn layer(&self, inner: S) -> Self::Service {
  type FollowRedirect (line 86) | pub struct FollowRedirect<S, P> {
  function with_policy (line 97) | pub fn with_policy(inner: S, policy: P) -> Self {
  type Response (line 109) | type Response = Response<ResBody>;
  type Error (line 110) | type Error = S::Error;
  type Future (line 111) | type Future = ResponseFuture<S, ReqBody, P>;
  function poll_ready (line 114) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 118) | fn call(&mut self, mut req: Request<ReqBody>) -> Self::Future {

FILE: src/client/layer/redirect/future.rs
  type Pending (line 26) | pub struct Pending<ReqBody, Response> {
  type Output (line 64) | type Output = Result<Response<ResBody>, S::Error>;
  method poll (line 66) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  function resolve_uri (line 196) | fn resolve_uri(relative: &str, base: &Uri) -> Option<Uri> {
  function drop_payload_headers (line 207) | fn drop_payload_headers(headers: &mut HeaderMap) {
  type RedirectFuturePin (line 218) | type RedirectFuturePin<'a, S, ReqBody> =
  type RedirectAction (line 221) | struct RedirectAction<'a, S, ReqBody, ResBody, P>
  function handle_action (line 237) | fn handle_action<S, ReqBody, ResBody, P>(

FILE: src/client/layer/redirect/policy.rs
  type Policy (line 10) | pub trait Policy<B, E> {
    method redirect (line 15) | fn redirect(&mut self, attempt: Attempt<'_>) -> Result<Action, E>;
    method follow_redirects (line 21) | fn follow_redirects(&mut self, _request: &mut Request<B>) -> bool;
    method on_request (line 24) | fn on_request(&mut self, _request: &mut Request<B>);
    method on_response (line 27) | fn on_response<Body>(&mut self, _response: &mut Response<Body>);
    method clone_body (line 30) | fn clone_body(&self, _body: &B) -> Option<B>;
  type Attempt (line 34) | pub struct Attempt<'a> {
  type Action (line 43) | pub enum Action {
    method fmt (line 55) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

FILE: src/client/layer/retry.rs
  type RetryPolicy (line 26) | pub struct RetryPolicy {
    method new (line 37) | pub fn new(policy: retry::Policy) -> Self {
    type Future (line 55) | type Future = Ready<()>;
    method retry (line 57) | fn retry(&mut self, req: &mut Req, result: &mut Result<Res, BoxError>)...
    method clone_request (line 101) | fn clone_request(&mut self, req: &Req) -> Option<Req> {
  type Req (line 50) | type Req = Request<Body>;
  type Res (line 52) | type Res = Response<Incoming>;
  function is_retryable_error (line 128) | fn is_retryable_error(err: &(dyn StdError + 'static)) -> bool {

FILE: src/client/layer/retry/classify.rs
  type Classify (line 8) | pub trait Classify: Send + Sync + 'static {
    method classify (line 9) | fn classify(&self, req_rep: ReqRep<'_>) -> Action;
    method classify (line 24) | fn classify(&self, req_rep: ReqRep<'_>) -> Action {
  type ClassifyFn (line 18) | pub struct ClassifyFn<F>(pub(crate) F);
  type ReqRep (line 31) | pub struct ReqRep<'a>(&'a Req, Result<StatusCode, &'a BoxError>);
  function method (line 35) | pub fn method(&self) -> &Method {
  function uri (line 40) | pub fn uri(&self) -> &Uri {
  function status (line 45) | pub fn status(&self) -> Option<StatusCode> {
  function error (line 50) | pub fn error(&self) -> Option<&(dyn StdError + 'static)> {
  function retryable (line 55) | pub fn retryable(self) -> Action {
  function success (line 60) | pub fn success(self) -> Action {
  type Action (line 67) | pub enum Action {
  type Classifier (line 76) | pub(crate) enum Classifier {
    method classify (line 87) | pub(super) fn classify(&mut self, req: &Req, res: &Result<Res, BoxErro...

FILE: src/client/layer/retry/scope.rs
  type Scope (line 5) | pub trait Scope: Send + Sync + 'static {
    method applies_to (line 6) | fn applies_to(&self, req: &super::Req) -> bool;
    method applies_to (line 27) | fn applies_to(&self, req: &Req) -> bool {
  type ScopeFn (line 21) | pub struct ScopeFn<F>(pub(crate) F);
  type Scoped (line 34) | pub(crate) enum Scoped {
    method applies_to (line 43) | pub(super) fn applies_to(&self, req: &super::Req) -> bool {

FILE: src/client/layer/timeout.rs
  type TimeoutOptions (line 24) | pub struct TimeoutOptions {
    method read_timeout (line 32) | pub fn read_timeout(&mut self, read_timeout: Duration) -> &mut Self {
    method total_timeout (line 39) | pub fn total_timeout(&mut self, total_timeout: Duration) -> &mut Self {
  type TimeoutLayer (line 50) | pub struct TimeoutLayer {
    method new (line 56) | pub fn new(options: TimeoutOptions) -> Self {
    type Service (line 64) | type Service = Timeout<S>;
    method layer (line 67) | fn layer(&self, service: S) -> Self::Service {
  type Timeout (line 77) | pub struct Timeout<T> {
  type Response (line 86) | type Response = S::Response;
  type Error (line 87) | type Error = BoxError;
  type Future (line 88) | type Future = ResponseFuture<S::Future>;
  function poll_ready (line 91) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 96) | fn call(&mut self, req: Request<ReqBody>) -> Self::Future {
  type ResponseBodyTimeoutLayer (line 109) | pub struct ResponseBodyTimeoutLayer {
    method new (line 116) | pub fn new<M>(timer: M, options: TimeoutOptions) -> Self
    type Service (line 128) | type Service = ResponseBodyTimeout<S>;
    method layer (line 131) | fn layer(&self, inner: S) -> Self::Service {
  type ResponseBodyTimeout (line 143) | pub struct ResponseBodyTimeout<S> {
  type Response (line 153) | type Response = Response<TimeoutBody<ResBody>>;
  type Error (line 154) | type Error = S::Error;
  type Future (line 155) | type Future = ResponseBodyTimeoutFuture<S::Future>;
  function poll_ready (line 158) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 163) | fn call(&mut self, req: Request<ReqBody>) -> Self::Future {
  function fetch_timeout_options (line 174) | fn fetch_timeout_options(

FILE: src/client/layer/timeout/body.rs
  function new (line 71) | pub fn new(
  type Data (line 111) | type Data = B::Data;
  type Error (line 112) | type Error = BoxError;
  method poll_frame (line 115) | fn poll_frame(
  method size_hint (line 128) | fn size_hint(&self) -> http_body::SizeHint {
  method is_end_stream (line 138) | fn is_end_stream(&self) -> bool {
  function poll_and_map_body (line 149) | fn poll_and_map_body<B>(
  type Data (line 168) | type Data = B::Data;
  type Error (line 169) | type Error = BoxError;
  method poll_frame (line 171) | fn poll_frame(
  method size_hint (line 183) | fn size_hint(&self) -> http_body::SizeHint {
  method is_end_stream (line 188) | fn is_end_stream(&self) -> bool {
  type Data (line 199) | type Data = B::Data;
  type Error (line 200) | type Error = BoxError;
  method poll_frame (line 202) | fn poll_frame(
  method size_hint (line 233) | fn size_hint(&self) -> http_body::SizeHint {
  method is_end_stream (line 238) | fn is_end_stream(&self) -> bool {

FILE: src/client/layer/timeout/future.rs
  type Output (line 35) | type Output = Result<T, BoxError>;
  method poll (line 37) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
  type Output (line 85) | type Output = Result<Response<TimeoutBody<ResBody>>, E>;
  method poll (line 87) | fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {

FILE: src/client/multipart.rs
  type Form (line 18) | pub struct Form {
    method new (line 50) | pub fn new() -> Form {
    method with_boundary (line 59) | pub fn with_boundary<S>(boundary: S) -> Form
    method boundary (line 72) | pub fn boundary(&self) -> &str {
    method text (line 85) | pub fn text<T, U>(self, name: T, value: U) -> Form
    method file (line 113) | pub async fn file<T, U>(self, name: T, path: U) -> io::Result<Form>
    method part (line 122) | pub fn part<T>(mut self, name: T, part: Part) -> Form
    method percent_encode_path_segment (line 131) | pub fn percent_encode_path_segment(mut self) -> Form {
    method percent_encode_attr_chars (line 137) | pub fn percent_encode_attr_chars(mut self) -> Form {
    method percent_encode_noop (line 143) | pub fn percent_encode_noop(mut self) -> Form {
    method stream (line 149) | pub(crate) fn stream(self) -> Body {
    method into_stream (line 158) | pub fn into_stream(mut self) -> impl Stream<Item = Result<Bytes, crate...
    method part_stream (line 186) | pub(crate) fn part_stream<T>(
    method compute_length (line 214) | pub(crate) fn compute_length(&mut self) -> Option<u64> {
    method take_fields (line 247) | fn take_fields(&mut self) -> Vec<(Cow<'static, str>, Part)> {
  type Part (line 27) | pub struct Part {
    method text (line 256) | pub fn text<T>(value: T) -> Part
    method bytes (line 268) | pub fn bytes<T>(value: T) -> Part
    method stream (line 280) | pub fn stream<T: Into<Body>>(value: T) -> Part {
    method stream_with_length (line 287) | pub fn stream_with_length<T: Into<Body>>(value: T, length: u64) -> Part {
    method file (line 298) | pub async fn file<T: AsRef<Path>>(path: T) -> io::Result<Part> {
    method new (line 320) | fn new(value: Body, body_length: Option<u64>) -> Part {
    method mime_str (line 329) | pub fn mime_str(self, mime: &str) -> crate::Result<Part> {
    method mime (line 334) | fn mime(self, mime: Mime) -> Part {
    method file_name (line 339) | pub fn file_name<T>(self, filename: T) -> Part
    method headers (line 347) | pub fn headers(self, headers: HeaderMap) -> Part {
    method value_len (line 351) | fn value_len(&self) -> Option<u64> {
    method metadata (line 359) | fn metadata(&self) -> &PartMetadata {
    method with_inner (line 363) | fn with_inner<F>(self, func: F) -> Self
  type PartMetadata (line 34) | struct PartMetadata {
    method new (line 377) | fn new() -> Self {
    method mime (line 385) | fn mime(mut self, mime: Mime) -> Self {
    method file_name (line 390) | fn file_name<T>(mut self, filename: T) -> Self
    method headers (line 398) | fn headers<T>(mut self, headers: T) -> Self
  method default (line 43) | fn default() -> Self {
  constant FRAGMENT_ENCODE_SET (line 408) | const FRAGMENT_ENCODE_SET: &AsciiSet = &percent_encoding::CONTROLS
  constant PATH_ENCODE_SET (line 416) | const PATH_ENCODE_SET: &AsciiSet = &FRAGMENT_ENCODE_SET.add(b'#').add(b'...
  constant PATH_SEGMENT_ENCODE_SET (line 418) | const PATH_SEGMENT_ENCODE_SET: &AsciiSet = &PATH_ENCODE_SET.add(b'/').ad...
  constant ATTR_CHAR_ENCODE_SET (line 421) | const ATTR_CHAR_ENCODE_SET: &AsciiSet = &NON_ALPHANUMERIC
  type PercentEncoding (line 436) | enum PercentEncoding {
    method encode_headers (line 443) | fn encode_headers(&self, name: &str, field: &PartMetadata) -> Vec<u8> {
    method percent_encode (line 488) | fn percent_encode<'a>(&self, value: &'a str) -> Cow<'a, str> {
  function gen_boundary (line 500) | fn gen_boundary() -> String {
  function form_empty (line 550) | fn form_empty() {
  function stream_to_end (line 565) | fn stream_to_end() {
  function stream_to_end_with_header (line 624) | fn stream_to_end_with_header() {
  function correct_content_length (line 656) | fn correct_content_length() {
  function header_percent_encoding (line 679) | fn header_percent_encoding() {
  function custom_boundary_is_applied (line 695) | fn custom_boundary_is_applied() {

FILE: src/client/request.rs
  type Request (line 48) | pub struct Request(http::Request<Option<Body>>);
    method new (line 61) | pub fn new(method: Method, uri: Uri) -> Self {
    method method (line 70) | pub fn method(&self) -> &Method {
    method method_mut (line 76) | pub fn method_mut(&mut self) -> &mut Method {
    method uri (line 82) | pub fn uri(&self) -> &Uri {
    method uri_mut (line 88) | pub fn uri_mut(&mut self) -> &mut Uri {
    method headers (line 94) | pub fn headers(&self) -> &HeaderMap {
    method headers_mut (line 100) | pub fn headers_mut(&mut self) -> &mut HeaderMap {
    method body (line 106) | pub fn body(&self) -> Option<&Body> {
    method body_mut (line 112) | pub fn body_mut(&mut self) -> &mut Option<Body> {
    method version (line 118) | pub fn version(&self) -> Option<Version> {
    method version_mut (line 125) | pub fn version_mut(&mut self) -> &mut Option<Version> {
    method extensions (line 144) | pub fn extensions(&self) -> &Extensions {
    method extensions_mut (line 161) | pub fn extensions_mut(&mut self) -> &mut Extensions {
    method try_clone (line 168) | pub fn try_clone(&self) -> Option<Request> {
    method config (line 182) | pub(crate) fn config<T>(&self) -> Option<&T::Value>
    method config_mut (line 190) | pub(crate) fn config_mut<T>(&mut self) -> &mut Option<T::Value>
    method from (line 893) | fn from(req: http::Request<T>) -> Request {
  type RequestBuilder (line 54) | pub struct RequestBuilder {
    method new (line 199) | pub(super) fn new(client: Client, request: crate::Result<Request>) -> ...
    method from_parts (line 216) | pub fn from_parts(client: Client, request: Request) -> RequestBuilder {
    method header_sensitive (line 224) | fn header_sensitive<K, V>(mut self, key: K, value: V, sensitive: bool)...
    method header (line 259) | pub fn header<K, V>(self, key: K, value: V) -> RequestBuilder
    method headers (line 272) | pub fn headers(mut self, headers: HeaderMap) -> RequestBuilder {
    method orig_headers (line 280) | pub fn orig_headers(mut self, orig_headers: OrigHeaderMap) -> RequestB...
    method default_headers (line 290) | pub fn default_headers(mut self, enable: bool) -> RequestBuilder {
    method auth (line 312) | pub fn auth<V>(self, token: V) -> RequestBuilder
    method basic_auth (line 335) | pub fn basic_auth<U, P>(self, username: U, password: Option<P>) -> Req...
    method bearer_auth (line 359) | pub fn bearer_auth<T: fmt::Display>(self, token: T) -> RequestBuilder {
    method timeout (line 369) | pub fn timeout(mut self, timeout: Duration) -> RequestBuilder {
    method read_timeout (line 383) | pub fn read_timeout(mut self, timeout: Duration) -> RequestBuilder {
    method query (line 412) | pub fn query<T: Serialize + ?Sized>(mut self, query: &T) -> RequestBui...
    method form (line 459) | pub fn form<T: Serialize + ?Sized>(mut self, form: &T) -> RequestBuild...
    method json (line 489) | pub fn json<T: Serialize + ?Sized>(mut self, json: &T) -> RequestBuild...
    method body (line 508) | pub fn body<T: Into<Body>>(mut self, body: T) -> RequestBuilder {
    method multipart (line 532) | pub fn multipart(mut self, mut multipart: multipart::Form) -> RequestB...
    method version (line 561) | pub fn version(mut self, version: Version) -> RequestBuilder {
    method redirect (line 572) | pub fn redirect(mut self, policy: redirect::Policy) -> RequestBuilder {
    method cookie_provider (line 582) | pub fn cookie_provider<C: IntoCookieStore>(mut self, cookie_store: C) ...
    method gzip (line 593) | pub fn gzip(mut self, gzip: bool) -> RequestBuilder {
    method brotli (line 605) | pub fn brotli(mut self, brotli: bool) -> RequestBuilder {
    method deflate (line 617) | pub fn deflate(mut self, deflate: bool) -> RequestBuilder {
    method zstd (line 629) | pub fn zstd(mut self, zstd: bool) -> RequestBuilder {
    method proxy (line 639) | pub fn proxy(mut self, proxy: Proxy) -> RequestBuilder {
    method local_address (line 649) | pub fn local_address<V>(mut self, local_address: V) -> RequestBuilder
    method local_addresses (line 664) | pub fn local_addresses<V4, V6>(mut self, ipv4_address: V4, ipv6_addres...
    method interface (line 738) | pub fn interface<I>(mut self, interface: I) -> RequestBuilder
    method emulation (line 762) | pub fn emulation<T: IntoEmulation>(mut self, emulation: T) -> RequestB...
    method group (line 783) | pub fn group(mut self, group: Group) -> RequestBuilder {
    method build (line 796) | pub fn build(self) -> crate::Result<Request> {
    method build_split (line 806) | pub fn build_split(self) -> (Client, crate::Result<Request>) {
    method send (line 828) | pub fn send(self) -> impl Future<Output = crate::Result<Response>> {
    method try_clone (line 853) | pub fn try_clone(&self) -> Option<RequestBuilder> {
  function extract_authority (line 867) | fn extract_authority(uri: &mut Uri) -> Option<(String, Option<String>)> {
  function from (line 900) | fn from(req: Request) -> http::Request<Body> {

FILE: src/client/response.rs
  type Response (line 30) | pub struct Response {
    method new (line 37) | pub(super) fn new<B>(mut res: http::Response<B>, uri: Uri) -> Response
    method uri (line 54) | pub fn uri(&self) -> &Uri {
    method status (line 60) | pub fn status(&self) -> StatusCode {
    method version (line 66) | pub fn version(&self) -> Version {
    method headers (line 72) | pub fn headers(&self) -> &HeaderMap {
    method headers_mut (line 78) | pub fn headers_mut(&mut self) -> &mut HeaderMap {
    method content_length (line 94) | pub fn content_length(&self) -> Option<u64> {
    method cookies (line 106) | pub fn cookies(&self) -> impl Iterator<Item = cookie::Cookie<'_>> {
    method local_addr (line 116) | pub fn local_addr(&self) -> Option<SocketAddr> {
    method remote_addr (line 124) | pub fn remote_addr(&self) -> Option<SocketAddr> {
    method text (line 162) | pub async fn text(self) -> crate::Result<String> {
    method text_with_charset (line 210) | pub async fn text_with_charset(
    method json (line 275) | pub async fn json<T: DeserializeOwned>(self) -> crate::Result<T> {
    method bytes (line 298) | pub async fn bytes(self) -> crate::Result<Bytes> {
    method bytes_stream (line 331) | pub fn bytes_stream(self) -> impl Stream<Item = crate::Result<Bytes>> {
    method extensions (line 362) | pub fn extensions(&self) -> &http::Extensions {
    method extensions_mut (line 391) | pub fn extensions_mut(&mut self) -> &mut http::Extensions {
    method forbid_recycle (line 405) | pub fn forbid_recycle(&self) {
    method error_for_status (line 432) | pub fn error_for_status(mut self) -> crate::Result<Self> {
    method error_for_status_ref (line 460) | pub fn error_for_status_ref(&self) -> crate::Result<&Self> {
    method upgrade (line 472) | pub async fn upgrade(self) -> crate::Result<Upgraded> {
    method from (line 480) | fn from(r: http::Response<T>) -> Response {
  function from (line 493) | fn from(r: Response) -> http::Response<Body> {
  method from (line 503) | fn from(r: Response) -> Body {
  type Data (line 510) | type Data = Bytes;
  type Error (line 512) | type Error = Error;
  method poll_frame (line 515) | fn poll_frame(
  method is_end_stream (line 523) | fn is_end_stream(&self) -> bool {
  method size_hint (line 528) | fn size_hint(&self) -> http_body::SizeHint {

FILE: src/client/ws.rs
  type WebSocketStream (line 33) | type WebSocketStream = tokio_tungstenite::WebSocketStream<Upgraded>;
  type WebSocketRequestBuilder (line 37) | pub struct WebSocketRequestBuilder {
    method new (line 46) | pub fn new(inner: RequestBuilder) -> Self {
    method accept_key (line 67) | pub fn accept_key<K>(mut self, key: K) -> Self
    method version (line 94) | pub fn version(mut self, version: Version) -> Self {
    method protocols (line 105) | pub fn protocols<P>(mut self, protocols: P) -> Self
    method max_frame_size (line 117) | pub fn max_frame_size(mut self, max_frame_size: usize) -> Self {
    method read_buffer_size (line 124) | pub fn read_buffer_size(mut self, read_buffer_size: usize) -> Self {
    method write_buffer_size (line 131) | pub fn write_buffer_size(mut self, write_buffer_size: usize) -> Self {
    method max_write_buffer_size (line 138) | pub fn max_write_buffer_size(mut self, max_write_buffer_size: usize) -...
    method max_message_size (line 145) | pub fn max_message_size(mut self, max_message_size: usize) -> Self {
    method accept_unmasked_frames (line 152) | pub fn accept_unmasked_frames(mut self, accept_unmasked_frames: bool) ...
    method header (line 161) | pub fn header<K, V>(mut self, key: K, value: V) -> Self
    method headers (line 176) | pub fn headers(mut self, headers: HeaderMap) -> Self {
    method orig_headers (line 183) | pub fn orig_headers(mut self, orig_headers: OrigHeaderMap) -> Self {
    method default_headers (line 191) | pub fn default_headers(mut self, enable: bool) -> Self {
    method auth (line 212) | pub fn auth<V>(mut self, value: V) -> Self
    method basic_auth (line 237) | pub fn basic_auth<U, P>(mut self, username: U, password: Option<P>) ->...
    method bearer_auth (line 262) | pub fn bearer_auth<T>(mut self, token: T) -> Self
    method query (line 291) | pub fn query<T: serde::Serialize + ?Sized>(mut self, query: &T) -> Self {
    method proxy (line 298) | pub fn proxy(mut self, proxy: Proxy) -> Self {
    method local_address (line 305) | pub fn local_address<V>(mut self, local_address: V) -> Self
    method local_addresses (line 315) | pub fn local_addresses<V4, V6>(mut self, ipv4: V4, ipv6: V6) -> Self
    method interface (line 383) | pub fn interface<I>(mut self, interface: I) -> Self
    method emulation (line 402) | pub fn emulation<T: IntoEmulation>(mut self, emulation: T) -> Self {
    method send (line 408) | pub async fn send(self) -> Result<WebSocketResponse, Error> {
  type WebSocketResponse (line 504) | pub struct WebSocketResponse {
    method into_websocket (line 528) | pub async fn into_websocket(self) -> Result<WebSocket, Error> {
  type Target (line 512) | type Target = Response;
  method deref (line 514) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 520) | fn deref_mut(&mut self) -> &mut Self::Target {
  function header_eq (line 622) | fn header_eq(headers: &HeaderMap, key: HeaderName, value: &'static str) ...
  function header_contains (line 631) | fn header_contains(headers: &HeaderMap, key: HeaderName, value: &'static...
  method protocol (line 658) | pub fn protocol(&self) -> Option<&HeaderValue> {
  method recv (line 666) | pub async fn recv(&mut self) -> Option<Result<Message, Error>> {
  method send (line 672) | pub async fn send(&mut self, msg: Message) -> Result<(), Error> {
  method into_inner (line 681) | pub fn into_inner(self) -> Upgraded {
  method close (line 686) | pub async fn close<C, R>(mut self, code: C, reason: R) -> Result<(), Error>
  type Error (line 704) | type Error = Error;
  method poll_ready (line 707) | fn poll_ready(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
  method start_send (line 715) | fn start_send(self: Pin<&mut Self>, item: Message) -> Result<(), Self::E...
  method poll_flush (line 723) | fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
  method poll_close (line 731) | fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result...
  method is_terminated (line 741) | fn is_terminated(&self) -> bool {
  type Item (line 747) | type Item = Result<Message, Error>;
  method poll_next (line 749) | fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Opt...

FILE: src/client/ws/json.rs
  method text_from_json (line 18) | pub fn text_from_json<T: Serialize + ?Sized>(json: &T) -> crate::Result<...
  method binary_from_json (line 36) | pub fn binary_from_json<T: Serialize + ?Sized>(json: &T) -> crate::Resul...
  method json (line 57) | pub fn json<T: DeserializeOwned>(&self) -> crate::Result<T> {
  type Content (line 76) | struct Content {
  function text_json (line 81) | pub fn text_json() -> crate::Result<()> {
  function binary_json (line 91) | pub fn binary_json() -> crate::Result<()> {

FILE: src/client/ws/message.rs
  type Utf8Bytes (line 18) | pub struct Utf8Bytes(pub(super) tungstenite::Utf8Bytes);
    method from_static (line 23) | pub const fn from_static(str: &'static str) -> Self {
    method as_str (line 29) | pub fn as_str(&self) -> &str {
    method fmt (line 57) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> fmt::Result {
    type Error (line 63) | type Error = std::str::Utf8Error;
    method try_from (line 66) | fn try_from(bytes: Bytes) -> Result<Self, Self::Error> {
    type Error (line 72) | type Error = std::str::Utf8Error;
    method try_from (line 75) | fn try_from(v: Vec<u8>) -> Result<Self, Self::Error> {
    method from (line 82) | fn from(s: String) -> Self {
    method from (line 89) | fn from(s: &str) -> Self {
    method from (line 96) | fn from(s: &String) -> Self {
    method eq (line 120) | fn eq(&self, other: &T) -> bool {
  type Target (line 35) | type Target = str;
  method deref (line 50) | fn deref(&self) -> &Self::Target {
  method from (line 103) | fn from(Utf8Bytes(bytes): Utf8Bytes) -> Self {
  type CloseCode (line 127) | pub struct CloseCode(pub(super) u16);
    constant NORMAL (line 136) | pub const NORMAL: CloseCode = CloseCode(1000);
    constant AWAY (line 140) | pub const AWAY: CloseCode = CloseCode(1001);
    constant PROTOCOL (line 143) | pub const PROTOCOL: CloseCode = CloseCode(1002);
    constant UNSUPPORTED (line 150) | pub const UNSUPPORTED: CloseCode = CloseCode(1003);
    constant STATUS (line 153) | pub const STATUS: CloseCode = CloseCode(1005);
    constant ABNORMAL (line 156) | pub const ABNORMAL: CloseCode = CloseCode(1006);
    constant INVALID (line 162) | pub const INVALID: CloseCode = CloseCode(1007);
    constant POLICY (line 170) | pub const POLICY: CloseCode = CloseCode(1008);
    constant SIZE (line 174) | pub const SIZE: CloseCode = CloseCode(1009);
    constant EXTENSION (line 184) | pub const EXTENSION: CloseCode = CloseCode(1010);
    constant ERROR (line 188) | pub const ERROR: CloseCode = CloseCode(1011);
    constant RESTART (line 191) | pub const RESTART: CloseCode = CloseCode(1012);
    constant AGAIN (line 196) | pub const AGAIN: CloseCode = CloseCode(1013);
    method from (line 208) | fn from(code: u16) -> CloseCode {
  function from (line 201) | fn from(code: CloseCode) -> u16 {
  type CloseFrame (line 215) | pub struct CloseFrame {
  type Message (line 246) | pub enum Message {
    method into_tungstenite (line 298) | pub(super) fn into_tungstenite(self) -> tungstenite::Message {
    method from_tungstenite (line 330) | pub(super) fn from_tungstenite(message: tungstenite::Message) -> Optio...
    method into_data (line 348) | pub fn into_data(self) -> Bytes {
    method into_text (line 358) | pub fn into_text(self) -> crate::Result<Utf8Bytes> {
    method to_text (line 371) | pub fn to_text(&self) -> crate::Result<&str> {
    method text (line 385) | pub fn text<S>(string: S) -> Message
    method binary (line 393) | pub fn binary<B>(bin: B) -> Message
    method ping (line 401) | pub fn ping<B>(bin: B) -> Message
    method pong (line 409) | pub fn pong<B>(bin: B) -> Message
    method close (line 417) | pub fn close<C>(close: C) -> Message
    method from (line 426) | fn from(string: String) -> Self {
    method from (line 432) | fn from(string: &'s str) -> Self {
    method from (line 438) | fn from(data: &'b [u8]) -> Self {
    method from (line 444) | fn from(data: Vec<u8>) -> Self {
  function from (line 450) | fn from(msg: Message) -> Self {

FILE: src/config.rs
  type RequestConfigValue (line 33) | pub(crate) trait RequestConfigValue: Clone + 'static {
  type RequestConfig (line 40) | pub(crate) struct RequestConfig<T: RequestConfigValue>(Option<T::Value>);
  method default (line 44) | fn default() -> Self {
  function new (line 55) | pub(crate) const fn new(v: Option<T::Value>) -> Self {
  function as_ref (line 61) | pub(crate) const fn as_ref(&self) -> Option<&T::Value> {
  function fetch (line 70) | pub(crate) fn fetch<'a>(&'a self, ext: &'a Extensions) -> Option<&'a T::...
  function store (line 83) | pub(crate) fn store<'a>(&'a self, ext: &'a mut Extensions) -> &'a mut Op...
  function load (line 93) | pub(crate) fn load(&mut self, ext: &mut Extensions) -> Option<&T::Value> {
  function get (line 105) | pub(crate) fn get(ext: &Extensions) -> Option<&T::Value> {
  function get_mut (line 115) | pub(crate) fn get_mut(ext: &mut Extensions) -> &mut Option<T::Value> {
  function remove (line 123) | pub(crate) fn remove(ext: &mut Extensions) -> Option<T::Value> {

FILE: src/cookie.rs
  type Cookies (line 14) | pub enum Cookies {
  type CookieStore (line 26) | pub trait CookieStore: Send + Sync {
    method set_cookies (line 28) | fn set_cookies(&self, cookie_headers: &mut dyn Iterator<Item = &Header...
    method cookies (line 39) | fn cookies(&self, uri: &Uri, version: Version) -> Cookies;
    method set_cookies (line 414) | fn set_cookies(&self, cookie_headers: &mut dyn Iterator<Item = &Header...
    method cookies (line 425) | fn cookies(&self, uri: &Uri, version: Version) -> Cookies {
  type IntoCookie (line 54) | pub trait IntoCookie {
    method into_cookie (line 56) | fn into_cookie(self) -> Option<Cookie<'static>>;
    method into_cookie (line 75) | fn into_cookie(self) -> Option<Cookie<'static>> {
    method into_cookie (line 82) | fn into_cookie(self) -> Option<Cookie<'static>> {
    method into_cookie (line 89) | fn into_cookie(self) -> Option<Cookie<'static>> {
  type Cookie (line 61) | pub struct Cookie<'a>(RawCookie<'a>);
  type Jar (line 69) | pub struct Jar(RwLock<HashMap<String, HashMap<String, CookieJar>>>);
    method get (line 222) | pub fn get<U: IntoUri>(&self, name: &str, uri: U) -> Option<Cookie<'st...
    method get_all (line 250) | pub fn get_all(&self) -> impl Iterator<Item = Cookie<'static>> {
    method add (line 295) | pub fn add<C, U>(&self, cookie: C, uri: U)
    method remove (line 378) | pub fn remove<C, U>(&self, cookie: C, uri: U)
    method clear (line 408) | pub fn clear(&self) {
  function parse (line 97) | pub(crate) fn parse(value: &'a HeaderValue) -> crate::Result<Cookie<'a>> {
  function name (line 107) | pub fn name(&self) -> &str {
  function value (line 113) | pub fn value(&self) -> &str {
  function http_only (line 119) | pub fn http_only(&self) -> bool {
  function secure (line 125) | pub fn secure(&self) -> bool {
  function same_site_lax (line 131) | pub fn same_site_lax(&self) -> bool {
  function same_site_strict (line 137) | pub fn same_site_strict(&self) -> bool {
  function path (line 143) | pub fn path(&self) -> Option<&str> {
  function domain (line 149) | pub fn domain(&self) -> Option<&str> {
  function max_age (line 155) | pub fn max_age(&self) -> Option<std::time::Duration> {
  function expires (line 161) | pub fn expires(&self) -> Option<SystemTime> {
  function into_owned (line 171) | pub fn into_owned(self) -> Cookie<'static> {
  function fmt (line 178) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function from (line 185) | fn from(cookie: RawCookie<'c>) -> Cookie<'c> {
  function from (line 192) | fn from(cookie: Cookie<'c>) -> RawCookie<'c> {
  constant DEFAULT_PATH (line 496) | const DEFAULT_PATH: &str = "/";
  function domain_match (line 504) | fn domain_match(host: &str, domain: &str) -> bool {
  function path_match (line 524) | fn path_match(req_path: &str, cookie_path: &str) -> bool {
  function normalize_domain (line 536) | fn normalize_domain(domain: &str) -> &str {
  function normalize_path (line 549) | fn normalize_path(path: &str) -> &str {
  function jar_get_all_backfills_domain_and_path (line 569) | fn jar_get_all_backfills_domain_and_path() {
  function jar_get_all_keeps_existing_domain_and_path (line 584) | fn jar_get_all_keeps_existing_domain_and_path() {
  function jar_get_all_backfills_only_missing_field (line 602) | fn jar_get_all_backfills_only_missing_field() {
  function jar_add_rejects_mismatched_domain (line 622) | fn jar_add_rejects_mismatched_domain() {
  function jar_add_accepts_matching_parent_domain (line 630) | fn jar_add_accepts_matching_parent_domain() {
  function jar_get_all_export_import_keeps_effective_path (line 643) | fn jar_get_all_export_import_keeps_effective_path() {
  function cookie_store_invalid_explicit_path_falls_back_to_default_path (line 662) | fn cookie_store_invalid_explicit_path_falls_back_to_default_path() {
  function jar_sends_parent_domain_cookie_to_subdomain (line 675) | fn jar_sends_parent_domain_cookie_to_subdomain() {
  function jar_subdomain_cookie_does_not_leak_to_parent_or_sibling (line 713) | fn jar_subdomain_cookie_does_not_leak_to_parent_or_sibling() {

FILE: src/dns.rs
  type InternalResolve (line 32) | pub trait InternalResolve {
    method poll_ready (line 37) | fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll<Result<()...
    method resolve (line 38) | fn resolve(&mut self, name: Name) -> Self::Future;
    type Addrs (line 48) | type Addrs = S::Response;
    type Error (line 49) | type Error = S::Error;
    type Future (line 50) | type Future = S::Future;
    method poll_ready (line 52) | fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll<Result<()...
    method resolve (line 56) | fn resolve(&mut self, name: Name) -> Self::Future {
  function resolve (line 61) | pub async fn resolve<R>(resolver: &mut R, name: Name) -> Result<R::Addrs...

FILE: src/dns/gai.rs
  type GaiResolver (line 17) | pub struct GaiResolver {
    method new (line 40) | pub fn new() -> Self {
    type Response (line 46) | type Response = GaiAddrs;
    type Error (line 47) | type Error = io::Error;
    type Future (line 48) | type Future = GaiFuture;
    method poll_ready (line 50) | fn poll_ready(&mut self, _cx: &mut task::Context<'_>) -> Poll<Result<(...
    method call (line 54) | fn call(&mut self, name: Name) -> Self::Future {
  type GaiAddrs (line 22) | pub struct GaiAddrs {
  type GaiFuture (line 27) | pub struct GaiFuture {
  type SocketAddrs (line 32) | pub(crate) struct SocketAddrs {
    method new (line 117) | pub(crate) fn new(addrs: Vec<SocketAddr>) -> Self {
    method try_parse (line 123) | pub(crate) fn try_parse(host: &str, port: u16) -> Option<SocketAddrs> {
    method filter (line 140) | fn filter(self, predicate: impl FnMut(&SocketAddr) -> bool) -> SocketA...
    method split_by_preference (line 144) | pub(crate) fn split_by_preference(
    method is_empty (line 169) | pub(crate) fn is_empty(&self) -> bool {
    method len (line 173) | pub(crate) fn len(&self) -> usize {
  method resolve (line 67) | fn resolve(&self, name: Name) -> Resolving {
  type Output (line 81) | type Output = Result<GaiAddrs, io::Error>;
  method poll (line 83) | fn poll(mut self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll<Se...
  method drop (line 99) | fn drop(&mut self) {
  type Item (line 107) | type Item = SocketAddr;
  method next (line 109) | fn next(&mut self) -> Option<Self::Item> {
  type Item (line 179) | type Item = SocketAddr;
  method next (line 181) | fn next(&mut self) -> Option<SocketAddr> {
  function test_ip_addrs_split_by_preference (line 193) | fn test_ip_addrs_split_by_preference() {
  function test_name_from_str (line 243) | fn test_name_from_str() {

FILE: src/dns/hickory.rs
  type HickoryDnsResolver (line 15) | pub struct HickoryDnsResolver {
    method new (line 31) | pub fn new() -> HickoryDnsResolver {
  method resolve (line 57) | fn resolve(&self, name: Name) -> Resolving {

FILE: src/dns/resolve.rs
  type Name (line 16) | pub struct Name {
    method new (line 23) | pub fn new(host: Box<str>) -> Name {
    method as_str (line 29) | pub fn as_str(&self) -> &str {
    method from (line 35) | fn from(value: &str) -> Self {
    method fmt (line 41) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 47) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Addrs (line 53) | pub type Addrs = Box<dyn Iterator<Item = SocketAddr> + Send>;
  type Resolving (line 56) | pub type Resolving = Pin<Box<dyn Future<Output = Result<Addrs, BoxError>...
  type Resolve (line 59) | pub trait Resolve: Send + Sync {
    method resolve (line 72) | fn resolve(&self, name: Name) -> Resolving;
    method resolve (line 137) | fn resolve(&self, name: Name) -> Resolving {
  type DynResolver (line 88) | pub(crate) struct DynResolver {
    method new (line 94) | pub(crate) fn new(resolver: Arc<dyn Resolve>) -> Self {
    type Response (line 100) | type Response = Addrs;
    type Error (line 101) | type Error = BoxError;
    type Future (line 102) | type Future = Resolving;
    method poll_ready (line 104) | fn poll_ready(&mut self, _: &mut Context<'_>) -> Poll<Result<(), Self:...
    method call (line 108) | fn call(&mut self, name: Name) -> Self::Future {
  type DnsResolverWithOverrides (line 118) | pub(crate) struct DnsResolverWithOverrides {
    method new (line 125) | pub(crate) fn new(

FILE: src/error.rs
  type Result (line 8) | pub type Result<T> = std::result::Result<T, Error>;
  type BoxError (line 11) | pub type BoxError = Box<dyn StdError + Send + Sync>;
  type Error (line 18) | pub struct Error {
    method new (line 43) | fn new<E>(kind: Kind, source: Option<E>) -> Error
    method builder (line 57) | pub(crate) fn builder<E: Into<BoxError>>(e: E) -> Error {
    method body (line 62) | pub(crate) fn body<E: Into<BoxError>>(e: E) -> Error {
    method tls (line 67) | pub(crate) fn tls<E: Into<BoxError>>(e: E) -> Error {
    method decode (line 72) | pub(crate) fn decode<E: Into<BoxError>>(e: E) -> Error {
    method request (line 77) | pub(crate) fn request<E: Into<BoxError>>(e: E) -> Error {
    method redirect (line 82) | pub(crate) fn redirect<E: Into<BoxError>>(e: E, uri: Uri) -> Error {
    method upgrade (line 87) | pub(crate) fn upgrade<E: Into<BoxError>>(e: E) -> Error {
    method websocket (line 93) | pub(crate) fn websocket<E: Into<BoxError>>(e: E) -> Error {
    method status_code (line 98) | pub(crate) fn status_code(uri: Uri, status: StatusCode, reason: Option...
    method uri_bad_scheme (line 103) | pub(crate) fn uri_bad_scheme(uri: Uri) -> Error {
    method uri (line 129) | pub fn uri(&self) -> Option<&Uri> {
    method uri_mut (line 139) | pub fn uri_mut(&mut self) -> Option<&mut Uri> {
    method with_uri (line 145) | pub fn with_uri(mut self, uri: Uri) -> Self {
    method without_uri (line 153) | pub fn without_uri(mut self) -> Self {
    method is_builder (line 160) | pub fn is_builder(&self) -> bool {
    method is_redirect (line 166) | pub fn is_redirect(&self) -> bool {
    method is_status (line 172) | pub fn is_status(&self) -> bool {
    method is_timeout (line 177) | pub fn is_timeout(&self) -> bool {
    method is_request (line 205) | pub fn is_request(&self) -> bool {
    method is_connect (line 210) | pub fn is_connect(&self) -> bool {
    method is_proxy_connect (line 229) | pub fn is_proxy_connect(&self) -> bool {
    method is_connection_reset (line 248) | pub fn is_connection_reset(&self) -> bool {
    method is_body (line 265) | pub fn is_body(&self) -> bool {
    method is_tls (line 271) | pub fn is_tls(&self) -> bool {
    method is_decode (line 277) | pub fn is_decode(&self) -> bool {
    method is_upgrade (line 283) | pub fn is_upgrade(&self) -> bool {
    method is_websocket (line 290) | pub fn is_websocket(&self) -> bool {
    method status (line 295) | pub fn status(&self) -> Option<StatusCode> {
    method fmt (line 328) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    method fmt (line 346) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type Inner (line 22) | struct Inner {
  type Kind (line 29) | enum Kind {
  function map_timeout_to_connector_error (line 307) | pub(crate) fn map_timeout_to_connector_error(error: BoxError) -> BoxError {
  function map_timeout_to_request_error (line 319) | pub(crate) fn map_timeout_to_request_error(error: BoxError) -> BoxError {
  method source (line 391) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  type TimedOut (line 397) | pub(crate) struct TimedOut;
    method fmt (line 410) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type BadScheme (line 400) | pub(crate) struct BadScheme;
    method fmt (line 420) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type ProxyConnect (line 403) | pub(crate) struct ProxyConnect(pub(crate) BoxError);
    method fmt (line 435) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  method source (line 429) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  function assert_send (line 444) | fn assert_send<T: Send>() {}
  function assert_sync (line 445) | fn assert_sync<T: Sync>() {}
  function into_io (line 448) | fn into_io(self) -> io::Error {
  function decode_io (line 453) | fn decode_io(e: io::Error) -> Error {
  function test_source_chain (line 465) | fn test_source_chain() {
  function mem_size_of (line 476) | fn mem_size_of() {
  function roundtrip_io_error (line 482) | fn roundtrip_io_error() {
  function from_unknown_io_error (line 496) | fn from_unknown_io_error() {
  function is_timeout (line 506) | fn is_timeout() {
  function is_connection_reset (line 516) | fn is_connection_reset() {

FILE: src/ext.rs
  constant FRAGMENT (line 10) | const FRAGMENT: &AsciiSet = &CONTROLS.add(b' ').add(b'"').add(b'<').add(...
  constant PATH (line 13) | const PATH: &AsciiSet = &FRAGMENT.add(b'#').add(b'?').add(b'{').add(b'}');
  constant USERINFO (line 16) | const USERINFO: &AsciiSet = &PATH
  type ResponseExt (line 56) | pub trait ResponseExt {
    method uri (line 58) | fn uri(&self) -> Option<&Uri>;
    method uri (line 99) | fn uri(&self) -> Option<&Uri> {
  type ResponseBuilderExt (line 64) | pub trait ResponseBuilderExt {
    method uri (line 67) | fn uri(self, uri: Uri) -> Self;
    method uri (line 107) | fn uri(self, uri: Uri) -> Self {
  type RequestUri (line 72) | pub(crate) struct RequestUri(pub Uri);
  type UriExt (line 75) | pub(crate) trait UriExt {
    method is_http (line 77) | fn is_http(&self) -> bool;
    method is_https (line 80) | fn is_https(&self) -> bool;
    method port_or_default (line 83) | fn port_or_default(&self) -> u16;
    method set_query (line 87) | fn set_query(&mut self, query: String);
    method userinfo (line 90) | fn userinfo(&self) -> (Option<&str>, Option<&str>);
    method set_userinfo (line 93) | fn set_userinfo(&mut self, username: &str, password: Option<&str>);
    method is_http (line 116) | fn is_http(&self) -> bool {
    method is_https (line 121) | fn is_https(&self) -> bool {
    method port_or_default (line 125) | fn port_or_default(&self) -> u16 {
    method set_query (line 134) | fn set_query(&mut self, query: String) {
    method userinfo (line 159) | fn userinfo(&self) -> (Option<&str>, Option<&str>) {
    method set_userinfo (line 170) | fn set_userinfo(&mut self, username: &str, password: Option<&str>) {
  function test_uri_ext_is_https (line 225) | fn test_uri_ext_is_https() {
  function test_userinfo_with_username_and_password (line 236) | fn test_userinfo_with_username_and_password() {
  function test_userinfo_with_empty_username (line 245) | fn test_userinfo_with_empty_username() {
  function test_userinfo_with_empty_password (line 254) | fn test_userinfo_with_empty_password() {
  function test_userinfo_without_colon (line 269) | fn test_userinfo_without_colon() {
  function test_userinfo_without_at (line 278) | fn test_userinfo_without_at() {
  function test_set_userinfo_both (line 287) | fn test_set_userinfo_both() {
  function test_set_userinfo_empty_username (line 298) | fn test_set_userinfo_empty_username() {
  function test_set_userinfo_none_password (line 309) | fn test_set_userinfo_none_password() {
  function test_set_userinfo_empty_username_and_password (line 320) | fn test_set_userinfo_empty_username_and_password() {
  function test_set_userinfo_with_encoding (line 331) | fn test_set_userinfo_with_encoding() {
  function test_set_userinfo_only_username_with_encoding (line 350) | fn test_set_userinfo_only_username_with_encoding() {
  function test_set_userinfo_only_password_with_encoding (line 366) | fn test_set_userinfo_only_password_with_encoding() {
  function test_set_query (line 383) | fn test_set_query() {
  function test_response_builder_ext (line 401) | fn test_response_builder_ext() {
  function test_response_ext (line 413) | fn test_response_ext() {

FILE: src/header.rs
  type IntoOrigHeaderName (line 21) | pub trait IntoOrigHeaderName: sealed::Sealed {
    method into_orig_header_name (line 23) | fn into_orig_header_name(self) -> OrigHeaderName;
    method into_orig_header_name (line 232) | fn into_orig_header_name(self) -> OrigHeaderName {
    method into_orig_header_name (line 239) | fn into_orig_header_name(self) -> OrigHeaderName {
    method into_orig_header_name (line 246) | fn into_orig_header_name(self) -> OrigHeaderName {
    method into_orig_header_name (line 255) | fn into_orig_header_name(self) -> OrigHeaderName {
    method into_orig_header_name (line 264) | fn into_orig_header_name(self) -> OrigHeaderName {
    method into_orig_header_name (line 273) | fn into_orig_header_name(self) -> OrigHeaderName {
    method into_orig_header_name (line 280) | fn into_orig_header_name(self) -> OrigHeaderName {
  type OrigHeaderMap (line 33) | pub struct OrigHeaderMap(HeaderMap<OrigHeaderName>);
    method new (line 40) | pub fn new() -> Self {
    method with_capacity (line 46) | pub fn with_capacity(size: usize) -> Self {
    method insert (line 60) | pub fn insert<N>(&mut self, orig: N) -> bool
    method extend (line 77) | pub fn extend(&mut self, iter: OrigHeaderMap) {
    method len (line 87) | pub fn len(&self) -> usize {
    method is_empty (line 93) | pub fn is_empty(&self) -> bool {
    method iter (line 99) | pub fn iter(&self) -> impl Iterator<Item = (&HeaderName, &OrigHeaderNa...
    method sort_headers (line 107) | pub(crate) fn sort_headers(&self, headers: &mut HeaderMap) {
    method sort_headers_for_each (line 143) | pub(crate) fn sort_headers_for_each<F>(&self, headers: &mut HeaderMap,...
  type Item (line 174) | type Item = (&'a HeaderName, &'a OrigHeaderName);
  type IntoIter (line 175) | type IntoIter = <&'a HeaderMap<OrigHeaderName> as IntoIterator>::IntoIter;
  method into_iter (line 178) | fn into_iter(self) -> Self::IntoIter {
  type Item (line 184) | type Item = (Option<HeaderName>, OrigHeaderName);
  type IntoIter (line 185) | type IntoIter = <HeaderMap<OrigHeaderName> as IntoIterator>::IntoIter;
  method into_iter (line 188) | fn into_iter(self) -> Self::IntoIter {
  type OrigHeaderName (line 208) | pub struct OrigHeaderName {
    method as_ref (line 222) | fn as_ref(&self) -> &[u8] {
  type Kind (line 213) | pub(super) enum Kind {
  type Sealed (line 293) | pub trait Sealed {}
  function get_all (line 313) | pub(crate) fn get_all<'a>(
  function test_header_order (line 321) | fn test_header_order() {
  function test_extend_preserves_order (line 337) | fn test_extend_preserves_order() {
  function test_header_case (line 358) | fn test_header_case() {
  function test_header_multiple_cases (line 373) | fn test_header_multiple_cases() {
  function test_sort_headers_preserves_multiple_cookie_values (line 390) | fn test_sort_headers_preserves_multiple_cookie_values() {
  function test_sort_headers_multiple_values_different_headers (line 462) | fn test_sort_headers_multiple_values_different_headers() {

FILE: src/into_uri.rs
  type IntoUri (line 19) | pub trait IntoUri: IntoUriSealed {}
  type IntoUriSealed (line 29) | pub trait IntoUriSealed {
    method into_uri (line 31) | fn into_uri(self) -> Result<Uri>;
    method into_uri (line 35) | fn into_uri(self) -> Result<Uri> {
    method into_uri (line 43) | fn into_uri(self) -> Result<Uri> {
    method into_uri (line 52) | fn into_uri(self) -> Result<Uri> {
    method into_uri (line 61) | fn into_uri(self) -> Result<Uri> {
    method into_uri (line 68) | fn into_uri(self) -> Result<Uri> {
    method into_uri (line 74) | fn into_uri(self) -> Result<Uri> {
    method into_uri (line 83) | fn into_uri(self) -> Result<Uri> {
  type Kind (line 97) | pub(super) enum Kind<'a> {
  function parse (line 102) | pub(super) fn parse(s: Kind) -> Result<Uri> {
  function into_uri_bad_scheme (line 120) | fn into_uri_bad_scheme() {
  function into_uri_with_space_in_path (line 135) | fn into_uri_with_space_in_path() {
  function into_uri_with_unicode_in_path (line 141) | fn into_uri_with_unicode_in_path() {
  function into_uri_with_special_chars_in_path (line 147) | fn into_uri_with_special_chars_in_path() {
  function into_uri_with_query_preserved (line 153) | fn into_uri_with_query_preserved() {
  function into_uri_bytes_with_encoding (line 161) | fn into_uri_bytes_with_encoding() {
  function test_bytes_with_query (line 168) | fn test_bytes_with_query() {
  function test_bytes_with_unicode (line 175) | fn test_bytes_with_unicode() {
  function test_bytes_minimal (line 182) | fn test_bytes_minimal() {

FILE: src/lib.rs
  function _assert_impls (line 310) | fn _assert_impls() {
  function get (line 356) | pub fn get<T: IntoUri>(uri: T) -> RequestBuilder {
  function post (line 381) | pub fn post<T: IntoUri>(uri: T) -> RequestBuilder {
  function put (line 406) | pub fn put<T: IntoUri>(uri: T) -> RequestBuilder {
  function delete (line 430) | pub fn delete<T: IntoUri>(uri: T) -> RequestBuilder {
  function head (line 454) | pub fn head<T: IntoUri>(uri: T) -> RequestBuilder {
  function patch (line 479) | pub fn patch<T: IntoUri>(uri: T) -> RequestBuilder {
  function options (line 503) | pub fn options<T: IntoUri>(uri: T) -> RequestBuilder {
  function request (line 528) | pub fn request<T: IntoUri>(method: Method, uri: T) -> RequestBuilder {
  function websocket (line 582) | pub fn websocket<T: IntoUri>(uri: T) -> ws::WebSocketRequestBuilder {

FILE: src/proxy.rs
  type Proxy (line 62) | pub struct Proxy {
    method http (line 121) | pub fn http<U: IntoUri>(uri: U) -> crate::Result<Proxy> {
    method https (line 139) | pub fn https<U: IntoUri>(uri: U) -> crate::Result<Proxy> {
    method all (line 160) | pub fn all<U: IntoUri>(uri: U) -> crate::Result<Proxy> {
    method unix (line 179) | pub fn unix<P: uds::IntoUnixSocket>(unix: P) -> crate::Result<Proxy> {
    method new (line 183) | fn new(scheme: ProxyScheme) -> Proxy {
    method basic_auth (line 206) | pub fn basic_auth(mut self, username: &str, password: &str) -> Proxy {
    method custom_http_auth (line 239) | pub fn custom_http_auth(mut self, header_value: HeaderValue) -> Proxy {
    method custom_http_headers (line 259) | pub fn custom_http_headers(mut self, headers: HeaderMap) -> Proxy {
    method no_proxy (line 287) | pub fn no_proxy(mut self, no_proxy: Option<NoProxy>) -> Proxy {
    method into_matcher (line 292) | pub(crate) fn into_matcher(self) -> Matcher {
  type NoProxy (line 70) | pub struct NoProxy {
    method from_env (line 332) | pub fn from_env() -> Option<NoProxy> {
    method from_string (line 363) | pub fn from_string(no_proxy_list: &str) -> Option<Self> {
  type Intercepted (line 78) | pub(crate) enum Intercepted {
  type Matcher (line 85) | pub(crate) struct Matcher {
    method system (line 373) | pub(crate) fn system() -> Self {
    method intercept (line 382) | pub(crate) fn intercept(&self, dst: &Uri) -> Option<Intercepted> {
  type ProxyScheme (line 90) | enum ProxyScheme {
  type Extra (line 99) | struct Extra {
  method hash (line 390) | fn hash<H: Hasher>(&self, state: &mut H) {
  function uri (line 407) | fn uri(s: &str) -> Uri {
  function intercept (line 411) | fn intercept(p: &Matcher, s: &Uri) -> matcher::Intercept {
  function intercepted_uri (line 421) | fn intercepted_uri(p: &Matcher, s: &str) -> Uri {
  function test_http (line 432) | fn test_http() {
  function test_https (line 444) | fn test_https() {
  function test_all (line 456) | fn test_all() {
  function test_standard_with_custom_auth_header (line 471) | fn test_standard_with_custom_auth_header() {
  function test_maybe_has_http_auth (line 484) | fn test_maybe_has_http_auth() {
  function test_maybe_has_http_custom_headers (line 503) | fn test_maybe_has_http_custom_headers() {
  function test_socks_proxy_default_port (line 542) | fn test_socks_proxy_default_port(uri: &str, url2: &str, port: u16) {
  function test_socks4_proxy_default_port (line 559) | fn test_socks4_proxy_default_port() {
  function test_socks5_proxy_default_port (line 565) | fn test_socks5_proxy_default_port() {

FILE: src/proxy/mac.rs
  function with_system (line 16) | pub(super) fn with_system(builder: &mut super::matcher::Builder) {
  function parse_setting_from_dynamic_store (line 50) | fn parse_setting_from_dynamic_store(

FILE: src/proxy/matcher.rs
  type Matcher (line 34) | pub struct Matcher {
    method from_system (line 107) | pub fn from_system() -> Self {
    method builder (line 112) | pub fn builder() -> Builder {
    method intercept (line 120) | pub fn intercept(&self, dst: &Uri) -> Option<Intercepted> {
  type Intercept (line 46) | pub struct Intercept {
    method uri (line 147) | pub(crate) fn uri(&self) -> &Uri {
    method basic_auth (line 151) | pub(crate) fn basic_auth(&self) -> Option<&HeaderValue> {
    method custom_headers (line 164) | pub(crate) fn custom_headers(&self) -> Option<&HeaderMap> {
    method raw_auth (line 169) | pub(crate) fn raw_auth(&self) -> Option<(Bytes, Bytes)> {
  type Builder (line 56) | pub struct Builder {
    method from_env (line 181) | fn from_env() -> Self {
    method from_system (line 193) | fn from_system() -> Self {
    method all (line 207) | pub fn all<S>(mut self, val: S) -> Self
    method http (line 216) | pub fn http<S>(mut self, val: S) -> Self
    method https (line 225) | pub fn https<S>(mut self, val: S) -> Self
    method no (line 251) | pub fn no<S>(mut self, val: S) -> Self
    method unix (line 261) | pub fn unix<S>(mut self, val: S) -> Self
    method build (line 270) | pub(super) fn build(self, extra: Extra) -> Matcher {
  type Auth (line 67) | pub enum Auth {
  type NoProxy (line 77) | struct NoProxy {
    method empty (line 386) | fn empty() -> NoProxy {
    method from_string (line 413) | pub fn from_string(no_proxy_list: &str) -> Self {
    method contains (line 439) | pub fn contains(&self, host: &str) -> bool {
  type DomainMatcher (line 83) | struct DomainMatcher(Vec<String>);
    method contains (line 480) | fn contains(&self, domain: &str) -> bool {
  type IpMatcher (line 86) | struct IpMatcher(Vec<Ip>);
    method contains (line 457) | fn contains(&self, addr: IpAddr) -> bool {
  type Ip (line 89) | enum Ip {
  function get_first_env (line 307) | fn get_first_env(names: &[&str]) -> String {
  function parse_env_uri (line 317) | fn parse_env_uri(val: &str) -> Option<Intercept> {
  type IntoValue (line 518) | pub trait IntoValue {
    method into_value (line 520) | fn into_value(self) -> String;
    method into_value (line 525) | fn into_value(self) -> String {
    method into_value (line 532) | fn into_value(self) -> String {
    method into_value (line 539) | fn into_value(self) -> String {
  function test_domain_matcher (line 550) | fn test_domain_matcher() {
  function test_no_proxy_wildcard (line 574) | fn test_no_proxy_wildcard() {
  function test_no_proxy_ip_ranges (line 580) | fn test_no_proxy_ip_ranges() {
  function intercept (line 637) | fn intercept(p: &Matcher, u: &str) -> Intercept {
  function test_all_proxy (line 648) | fn test_all_proxy() {
  function test_specific_overrides_all (line 659) | fn test_specific_overrides_all() {
  function test_parse_no_scheme_defaults_to_http (line 672) | fn test_parse_no_scheme_defaults_to_http() {
  function test_parse_http_auth (line 686) | fn test_parse_http_auth() {
  function test_parse_http_auth_without_password (line 700) | fn test_parse_http_auth_without_password() {
  function test_parse_http_auth_without_scheme (line 713) | fn test_parse_http_auth_without_scheme() {
  function test_dont_parse_http_when_is_cgi (line 727) | fn test_dont_parse_http_when_is_cgi() {
  function test_parse_socks (line 736) | fn test_parse_socks(uri: &str) {
  function test_parse_socks4 (line 746) | fn test_parse_socks4() {
  function test_parse_socks5 (line 752) | fn test_parse_socks5() {
  function test_domain_matcher_case_insensitive (line 758) | fn test_domain_matcher_case_insensitive() {
  function test_no_proxy_case_insensitive (line 772) | fn test_no_proxy_case_insensitive() {

FILE: src/proxy/uds.rs
  type IntoUnixSocket (line 18) | pub trait IntoUnixSocket: sealed::Sealed {
    method unix_socket (line 20) | fn unix_socket(self) -> Arc<Path>;
    method unix_socket (line 24) | fn unix_socket(self) -> Arc<Path> {
    method unix_socket (line 30) | fn unix_socket(self) -> Arc<Path> {
    method unix_socket (line 36) | fn unix_socket(self) -> Arc<Path> {
    method unix_socket (line 41) | fn unix_socket(self) -> Arc<Path> {
    method unix_socket (line 47) | fn unix_socket(self) -> Arc<Path> {
  type Sealed (line 59) | pub trait Sealed {}

FILE: src/proxy/win.rs
  function with_system (line 1) | pub(super) fn with_system(builder: &mut super::matcher::Builder) {

FILE: src/redirect.rs
  type Policy (line 31) | pub struct Policy {
    method limited (line 116) | pub fn limited(max: usize) -> Self {
    method none (line 124) | pub fn none() -> Self {
    method custom (line 165) | pub fn custom<T>(policy: T) -> Self
    method redirect (line 194) | pub fn redirect(&self, attempt: Attempt) -> Action {
    method check (line 211) | fn check(
  type Attempt (line 39) | pub struct Attempt<'a, const PENDING: bool = true> {
  type Action (line 55) | pub struct Action {
  type History (line 61) | pub struct History(Vec<HistoryEntry>);
  type HistoryEntry (line 66) | pub struct HistoryEntry {
  type PolicyKind (line 81) | enum PolicyKind {
    method fmt (line 335) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type TooManyRedirects (line 88) | struct TooManyRedirects;
    method fmt (line 347) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type FollowRedirectPolicy (line 101) | pub(crate) struct FollowRedirectPolicy {
    method new (line 358) | pub fn new(policy: Policy) -> Self {
    method with_referer (line 370) | pub fn with_referer(mut self, referer: bool) -> Self {
    method with_https_only (line 377) | pub fn with_https_only(mut self, https_only: bool) -> Self {
    method redirect (line 384) | fn redirect(&mut self, attempt: redirect::Attempt<'_>) -> Result<redir...
    method follow_redirects (line 433) | fn follow_redirects(&mut self, request: &mut http::Request<Body>) -> b...
    method on_request (line 439) | fn on_request(&mut self, req: &mut http::Request<Body>) {
    method on_response (line 451) | fn on_response<Body>(&mut self, response: &mut http::Response<Body>) {
    method clone_body (line 458) | fn clone_body(&self, body: &Body) -> Option<Body> {
  method default (line 230) | fn default() -> Policy {
  function follow (line 243) | pub fn follow(self) -> Action {
  function stop (line 253) | pub fn stop(self) -> Action {
  function error (line 263) | pub fn error<E: Into<BoxError>>(self, error: E) -> Action {
  function pending (line 292) | pub fn pending<F, Fut>(self, func: F) -> Action
  type Item (line 313) | type Item = HistoryEntry;
  type IntoIter (line 314) | type IntoIter = std::vec::IntoIter<HistoryEntry>;
  method into_iter (line 317) | fn into_iter(self) -> Self::IntoIter {
  type Item (line 323) | type Item = &'a HistoryEntry;
  type IntoIter (line 324) | type IntoIter = std::slice::Iter<'a, HistoryEntry>;
  method into_iter (line 327) | fn into_iter(self) -> Self::IntoIter {
  function make_referer (line 463) | fn make_referer(next: Uri, previous: &Uri) -> Option<HeaderValue> {
  function remove_sensitive_headers (line 473) | fn remove_sensitive_headers(headers: &mut HeaderMap, next: &Uri, previou...
  function test_redirect_policy_limit (line 497) | fn test_redirect_policy_limit() {
  function test_redirect_policy_limit_to_0 (line 518) | fn test_redirect_policy_limit_to_0() {
  function test_redirect_policy_custom (line 530) | fn test_redirect_policy_custom() {
  function test_remove_sensitive_headers (line 553) | fn test_remove_sensitive_headers() {

FILE: src/retry.rs
  type Policy (line 49) | pub struct Policy {
    method never (line 62) | pub fn never() -> Policy {
    method for_host (line 83) | pub fn for_host<S>(host: S) -> Policy
    method scoped (line 98) | fn scoped<F>(func: F) -> Policy
    method no_budget (line 118) | pub fn no_budget(mut self) -> Self {
    method max_extra_load (line 139) | pub fn max_extra_load(mut self, extra_percent: f32) -> Self {
    method max_retries_per_request (line 158) | pub fn max_retries_per_request(mut self, max: u32) -> Self {
    method classify_fn (line 180) | pub fn classify_fn<F>(mut self, func: F) -> Self
  method default (line 190) | fn default() -> Self {

FILE: src/sync.rs
  type Mutex (line 32) | pub struct Mutex<T: ?Sized>(sync::Mutex<T>);
  function new (line 37) | pub fn new(t: T) -> Mutex<T> {
  function lock (line 45) | pub fn lock<'a>(&'a self) -> MutexGuard<'a, T> {
  type MutexGuard (line 52) | pub struct MutexGuard<'a, T: ?Sized + 'a>(sync::MutexGuard<'a, T>);
  type Target (line 55) | type Target = T;
  method deref (line 58) | fn deref(&self) -> &T {
  method deref_mut (line 65) | fn deref_mut(&mut self) -> &mut T {
  method default (line 71) | fn default() -> Self {
  type RwLock (line 80) | pub struct RwLock<T: ?Sized>(sync::RwLock<T>);
  function read (line 85) | pub fn read<'a>(&'a self) -> RwLockReadGuard<'a, T> {
  function write (line 91) | pub fn write<'a>(&'a self) -> RwLockWriteGuard<'a, T> {
  type RwLockReadGuard (line 98) | pub struct RwLockReadGuard<'a, T: ?Sized + 'a>(sync::RwLockReadGuard<'a,...
  type Target (line 101) | type Target = T;
  method deref (line 104) | fn deref(&self) -> &T {
  type RwLockWriteGuard (line 111) | pub struct RwLockWriteGuard<'a, T: ?Sized + 'a>(sync::RwLockWriteGuard<'...
  type Target (line 114) | type Target = T;
  method deref (line 117) | fn deref(&self) -> &T {
  method deref_mut (line 124) | fn deref_mut(&mut self) -> &mut T {

FILE: src/tls.rs
  type TlsInfo (line 23) | pub struct TlsInfo {
    method peer_certificate (line 30) | pub fn peer_certificate(&self) -> Option<&[u8]> {
    method peer_certificate_chain (line 37) | pub fn peer_certificate_chain(&self) -> Option<impl Iterator<Item = &[...
  type TlsVersion (line 46) | pub struct TlsVersion(btls::ssl::SslVersion);
    constant TLS_1_0 (line 50) | pub const TLS_1_0: TlsVersion = TlsVersion(btls::ssl::SslVersion::TLS1);
    constant TLS_1_1 (line 53) | pub const TLS_1_1: TlsVersion = TlsVersion(btls::ssl::SslVersion::TLS1...
    constant TLS_1_2 (line 56) | pub const TLS_1_2: TlsVersion = TlsVersion(btls::ssl::SslVersion::TLS1...
    constant TLS_1_3 (line 59) | pub const TLS_1_3: TlsVersion = TlsVersion(btls::ssl::SslVersion::TLS1...
  type AlpnProtocol (line 64) | pub struct AlpnProtocol(&'static [u8]);
    constant HTTP1 (line 68) | pub const HTTP1: AlpnProtocol = AlpnProtocol(b"http/1.1");
    constant HTTP2 (line 71) | pub const HTTP2: AlpnProtocol = AlpnProtocol(b"h2");
    constant HTTP3 (line 74) | pub const HTTP3: AlpnProtocol = AlpnProtocol(b"h3");
    method new (line 78) | pub const fn new(value: &'static [u8]) -> Self {
    method encode (line 83) | fn encode(self) -> Bytes {
    method encode_sequence (line 87) | fn encode_sequence<'a, I>(items: I) -> Bytes
  type AlpsProtocol (line 102) | pub struct AlpsProtocol(&'static [u8]);
    constant HTTP1 (line 106) | pub const HTTP1: AlpsProtocol = AlpsProtocol(b"http/1.1");
    constant HTTP2 (line 109) | pub const HTTP2: AlpsProtocol = AlpsProtocol(b"h2");
    constant HTTP3 (line 112) | pub const HTTP3: AlpsProtocol = AlpsProtocol(b"h3");
  type TlsOptionsBuilder (line 118) | pub struct TlsOptionsBuilder {
    method alpn_protocols (line 290) | pub fn alpn_protocols<I>(mut self, alpn: I) -> Self
    method alps_protocols (line 300) | pub fn alps_protocols<I>(mut self, alps: I) -> Self
    method alps_use_new_codepoint (line 310) | pub fn alps_use_new_codepoint(mut self, enabled: bool) -> Self {
    method session_ticket (line 316) | pub fn session_ticket(mut self, enabled: bool) -> Self {
    method min_tls_version (line 323) | pub fn min_tls_version<T>(mut self, version: T) -> Self
    method max_tls_version (line 333) | pub fn max_tls_version<T>(mut self, version: T) -> Self
    method pre_shared_key (line 343) | pub fn pre_shared_key(mut self, enabled: bool) -> Self {
    method enable_ech_grease (line 350) | pub fn enable_ech_grease(mut self, enabled: bool) -> Self {
    method permute_extensions (line 357) | pub fn permute_extensions<T>(mut self, permute: T) -> Self
    method grease_enabled (line 367) | pub fn grease_enabled<T>(mut self, enabled: T) -> Self
    method enable_ocsp_stapling (line 377) | pub fn enable_ocsp_stapling(mut self, enabled: bool) -> Self {
    method enable_signed_cert_timestamps (line 384) | pub fn enable_signed_cert_timestamps(mut self, enabled: bool) -> Self {
    method record_size_limit (line 391) | pub fn record_size_limit<U: Into<Option<u16>>>(mut self, limit: U) -> ...
    method psk_skip_session_ticket (line 398) | pub fn psk_skip_session_ticket(mut self, skip: bool) -> Self {
    method psk_dhe_ke (line 405) | pub fn psk_dhe_ke(mut self, enabled: bool) -> Self {
    method renegotiation (line 412) | pub fn renegotiation(mut self, enabled: bool) -> Self {
    method delegated_credentials (line 419) | pub fn delegated_credentials<T>(mut self, creds: T) -> Self
    method key_shares (line 429) | pub fn key_shares<T>(mut self, key_shares: T) -> Self
    method curves_list (line 439) | pub fn curves_list<T>(mut self, curves: T) -> Self
    method cipher_list (line 449) | pub fn cipher_list<T>(mut self, ciphers: T) -> Self
    method sigalgs_list (line 459) | pub fn sigalgs_list<T>(mut self, sigalgs: T) -> Self
    method certificate_compressors (line 469) | pub fn certificate_compressors<T>(mut self, algs: T) -> Self
    method extension_permutation (line 479) | pub fn extension_permutation<T>(mut self, permutation: T) -> Self
    method aes_hw_override (line 489) | pub fn aes_hw_override<T>(mut self, enabled: T) -> Self
    method random_aes_hw_override (line 499) | pub fn random_aes_hw_override(mut self, enabled: bool) -> Self {
    method preserve_tls13_cipher_list (line 517) | pub fn preserve_tls13_cipher_list<T>(mut self, enabled: T) -> Self
    method build (line 527) | pub fn build(self) -> TlsOptions {
  type TlsOptions (line 134) | pub struct TlsOptions {
    method builder (line 534) | pub fn builder() -> TlsOptionsBuilder {
  method default (line 542) | fn default() -> Self {
  function alpn_protocol_encode (line 579) | fn alpn_protocol_encode() {
  function alpn_protocol_encode_single (line 601) | fn alpn_protocol_encode_single() {

FILE: src/tls/compress.rs
  type Codec (line 21) | pub enum Codec {
    method call (line 55) | fn call(&self, input: &[u8], output: &mut dyn io::Write) -> io::Result...
  type CertificateCompressor (line 35) | pub trait CertificateCompressor: Debug + Sync + Send + 'static {
    method compress (line 37) | fn compress(&self) -> Codec;
    method decompress (line 40) | fn decompress(&self) -> Codec;
    method algorithm (line 43) | fn algorithm(&self) -> CertificateCompressionAlgorithm;
  type Compressor (line 46) | struct Compressor<const ALGORITHM: i32> {
  constant ALGORITHM (line 66) | const ALGORITHM: CertificateCompressionAlgorithm = match ALGORITHM {
  constant CAN_COMPRESS (line 72) | const CAN_COMPRESS: bool = true;
  constant CAN_DECOMPRESS (line 73) | const CAN_DECOMPRESS: bool = true;
  function compress (line 76) | fn compress<W>(&self, input: &[u8], output: &mut W) -> io::Result<()>
  function decompress (line 84) | fn decompress<W>(&self, input: &[u8], output: &mut W) -> io::Result<()>
  function register (line 93) | pub(super) fn register(

FILE: src/tls/conn.rs
  function key_index (line 39) | fn key_index() -> Result<Index<Ssl, Key>, ErrorStack> {
  type HandshakeSettings (line 46) | pub struct HandshakeSettings {
  type HttpsConnector (line 60) | pub struct HttpsConnector<T> {
  type TlsConnectorBuilder (line 66) | pub struct TlsConnectorBuilder {
    method alpn_protocol (line 243) | pub fn alpn_protocol(mut self, protocol: Option<AlpnProtocol>) -> Self {
    method keylog (line 250) | pub fn keylog(mut self, keylog: Option<KeyLog>) -> Self {
    method identity (line 257) | pub fn identity(mut self, identity: Option<Identity>) -> Self {
    method cert_store (line 264) | pub fn cert_store<T>(mut self, cert_store: T) -> Self
    method cert_verification (line 274) | pub fn cert_verification(mut self, enabled: bool) -> Self {
    method min_version (line 281) | pub fn min_version<T>(mut self, version: T) -> Self
    method max_version (line 291) | pub fn max_version<T>(mut self, version: T) -> Self
    method tls_sni (line 301) | pub fn tls_sni(mut self, enabled: bool) -> Self {
    method verify_hostname (line 308) | pub fn verify_hostname(mut self, enabled: bool) -> Self {
    method session_store (line 318) | pub fn session_store(mut self, store: Option<Arc<dyn TlsSessionCache>>...
    method build (line 326) | pub fn build<'a, T>(&self, opts: T) -> crate::Result<TlsConnector>
  type TlsConnector (line 81) | pub struct TlsConnector {
    method builder (line 114) | pub fn builder() -> TlsConnectorBuilder {
    method setup_ssl (line 129) | fn setup_ssl(&self, uri: Uri) -> Result<Ssl, BoxError> {
    method setup_ssl2 (line 137) | fn setup_ssl2(&self, descriptor: ConnectionDescriptor) -> Result<Ssl, ...
    method normalize_host (line 220) | fn normalize_host(host: &str) -> &str {
  function new (line 98) | pub fn new(http: S, tls: TlsConnector) -> HttpsConnector<S> {
  function no_alpn (line 104) | pub fn no_alpn(&mut self) -> &mut Self {
  type MaybeHttpsStream (line 487) | pub enum MaybeHttpsStream<T> {
  type EstablishedConn (line 495) | pub struct EstablishedConn<IO> {
  function as_ref (line 504) | fn as_ref(&self) -> &T {
  function fmt (line 513) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  method connected (line 525) | fn connected(&self) -> Connected {
  method poll_read (line 546) | fn poll_read(
  method poll_write (line 563) | fn poll_write(
  method poll_flush (line 575) | fn poll_flush(mut self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<i...
  method poll_shutdown (line 583) | fn poll_shutdown(mut self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Pol...
  method is_write_vectored (line 591) | fn is_write_vectored(&self) -> bool {
  method poll_write_vectored (line 599) | fn poll_write_vectored(
  function new (line 616) | pub fn new(io: IO, descriptor: ConnectionDescriptor) -> EstablishedConn<...

FILE: src/tls/conn/ext.rs
  type SslConnectorBuilderExt (line 14) | pub trait SslConnectorBuilderExt {
    method set_cert_store (line 16) | fn set_cert_store(self, store: Option<&CertStore>) -> crate::Result<Ss...
    method set_cert_verification (line 19) | fn set_cert_verification(self, enable: bool) -> crate::Result<SslConne...
    method set_cert_compressors (line 22) | fn set_cert_compressors(
    method set_cert_store (line 30) | fn set_cert_store(mut self, store: Option<&CertStore>) -> crate::Resul...
    method set_cert_verification (line 41) | fn set_cert_verification(mut self, enable: bool) -> crate::Result<SslC...
    method set_cert_compressors (line 51) | fn set_cert_compressors(

FILE: src/tls/conn/service.rs
  type BoxFuture (line 19) | type BoxFuture<T, E> = Pin<Box<dyn Future<Output = Result<T, E>> + Send>>;
  function perform_handshake (line 21) | async fn perform_handshake<T>(ssl: btls::ssl::Ssl, conn: T) -> Result<Ma...
  type Response (line 37) | type Response = MaybeHttpsStream<T>;
  type Error (line 38) | type Error = BoxError;
  type Future (line 39) | type Future = BoxFuture<Self::Response, Self::Error>;
  function poll_ready (line 42) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 46) | fn call(&mut self, uri: Uri) -> Self::Future {
  type Response (line 73) | type Response = MaybeHttpsStream<T>;
  type Error (line 74) | type Error = BoxError;
  type Future (line 75) | type Future = BoxFuture<Self::Response, Self::Error>;
  function poll_ready (line 78) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 82) | fn call(&mut self, descriptor: ConnectionDescriptor) -> Self::Future {
  type Response (line 111) | type Response = MaybeHttpsStream<IO>;
  type Error (line 112) | type Error = BoxError;
  type Future (line 113) | type Future = BoxFuture<Self::Response, Self::Error>;
  function poll_ready (line 116) | fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::...
  function call (line 120) | fn call(&mut self, conn: EstablishedConn<IO>) -> Self::Future {

FILE: src/tls/keylog.rs
  type KeyLog (line 26) | pub struct KeyLog(Option<Arc<Path>>);
    method from_env (line 30) | pub fn from_env() -> KeyLog {
    method from_file (line 40) | pub fn from_file<P: AsRef<Path>>(path: P) -> KeyLog {
    method handle (line 45) | pub(crate) fn handle(self) -> Result<Handle> {
  function normalize_path (line 68) | fn normalize_path<'a, P>(path: P) -> PathBuf

FILE: src/tls/keylog/handle.rs
  type Handle (line 13) | pub struct Handle {
    method new (line 21) | pub fn new(filepath: Arc<Path>) -> Result<Self> {
    method write (line 54) | pub fn write(&self, line: &str) {

FILE: src/tls/session.rs
  type Key (line 25) | pub struct Key(pub(super) ConnectionId);
  type TlsSession (line 29) | pub struct TlsSession(pub(super) SslSession);
    method id (line 79) | pub fn id(&self) -> &[u8] {
    method time (line 85) | pub fn time(&self) -> u64 {
    method timeout (line 93) | pub fn timeout(&self) -> u32 {
    method protocol_version (line 99) | pub fn protocol_version(&self) -> TlsVersion {
    method borrow (line 131) | fn borrow(&self) -> &[u8] {
  type TlsSessionCache (line 39) | pub trait TlsSessionCache: Send + Sync {
    method put (line 41) | fn put(&self, key: Key, session: TlsSession);
    method pop (line 47) | fn pop(&self, key: &Key) -> Option<TlsSession>;
    method put (line 152) | fn put(&self, key: Key, session: TlsSession) {
    method pop (line 182) | fn pop(&self, key: &Key) -> Option<TlsSession> {
  type LruTlsSessionCache (line 64) | pub struct LruTlsSessionCache {
    method new (line 140) | pub fn new(per_host_session_capacity: usize) -> Self {
  type Inner (line 69) | struct Inner {
  method eq (line 117) | fn eq(&self, other: &TlsSession) -> bool {
  method hash (line 124) | fn hash<H: Hasher>(&self, state: &mut H) {

FILE: src/tls/trust.rs
  type CertificateInput (line 20) | pub enum CertificateInput<'c> {
  function with_parser (line 28) | pub(crate) fn with_parser<F>(self, parser: F) -> crate::Result<Certificate>
  function from (line 40) | fn from(cert: Certificate) -> Self {
  function from (line 46) | fn from(value: &'c T) -> CertificateInput<'c> {
  type Certificate (line 53) | pub struct Certificate(X509);
    method from_der (line 58) | pub fn from_der<C: AsRef<[u8]>>(cert: C) -> crate::Result<Self> {
    method from_pem (line 64) | pub fn from_pem<C: AsRef<[u8]>>(cert: C) -> crate::Result<Self> {
    method stack_from_pem (line 70) | pub fn stack_from_pem<C: AsRef<[u8]>>(cert: C) -> crate::Result<Vec<Se...

FILE: src/tls/trust/identity.rs
  type Identity (line 11) | pub struct Identity {
    method from_pkcs12_der (line 44) | pub fn from_pkcs12_der(buf: &[u8], pass: &str) -> crate::Result<Identi...
    method from_pkcs8_pem (line 77) | pub fn from_pkcs8_pem(buf: &[u8], key: &[u8]) -> crate::Result<Identit...
    method add_to_tls (line 91) | pub(crate) fn add_to_tls(
  function identity_from_pkcs12_der_invalid (line 114) | fn identity_from_pkcs12_der_invalid() {
  function identity_from_pkcs8_pem_invalid (line 119) | fn identity_from_pkcs8_pem_invalid() {

FILE: src/tls/trust/parse.rs
  function parse_certs (line 6) | pub fn parse_certs<'c, I>(
  function parse_certs_with_stack (line 20) | pub fn parse_certs_with_stack<C, F>(certs: C, parse: F) -> Result<X509St...
  function process_certs (line 31) | pub fn process_certs<I>(iter: I, store: &mut X509StoreBuilder) -> Result...
  function filter_map_certs (line 53) | pub fn filter_map_certs<'c, I>(

FILE: src/tls/trust/store.rs
  type CertStoreBuilder (line 15) | pub struct CertStoreBuilder {
    method add_der_cert (line 24) | pub fn add_der_cert<'c, C>(self, cert: C) -> Self
    method add_pem_cert (line 33) | pub fn add_pem_cert<'c, C>(self, cert: C) -> Self
    method add_der_certs (line 42) | pub fn add_der_certs<'c, I>(self, certs: I) -> Self
    method add_pem_certs (line 52) | pub fn add_pem_certs<'c, I>(self, certs: I) -> Self
    method add_stack_pem_certs (line 61) | pub fn add_stack_pem_certs<C>(mut self, certs: C) -> Self
    method set_default_paths (line 81) | pub fn set_default_paths(mut self) -> Self {
    method build (line 95) | pub fn build(self) -> Result<CertStore> {
    method parse_cert (line 104) | fn parse_cert<'c, C, P>(mut self, cert: C, parser: P) -> Self
    method parse_certs (line 122) | fn parse_certs<'c, I>(mut self, certs: I, parser: fn(&'c [u8]) -> Resu...
  type CertStore (line 151) | pub struct CertStore(Arc<X509Store>);
    method builder (line 158) | pub fn builder() -> CertStoreBuilder {
    method from_der_certs (line 166) | pub fn from_der_certs<'c, C>(certs: C) -> Result<CertStore>
    method from_pem_certs (line 178) | pub fn from_pem_certs<'c, C>(certs: C) -> Result<CertStore>
    method from_pem_stack (line 190) | pub fn from_pem_stack<C>(certs: C) -> Result<CertStore>
    method add_to_tls (line 202) | pub(crate) fn add_to_tls(&self, tls: &mut SslConnectorBuilder) {
  method default (line 208) | fn default() -> Self {

FILE: src/util.rs
  function basic_auth (line 7) | pub(crate) fn basic_auth<U, P>(username: U, password: Option<P>) -> Head...
  function fast_random (line 31) | pub(crate) fn fast_random() -> u64 {
  function replace_headers (line 55) | pub(crate) fn replace_headers(dst: &mut HeaderMap, src: HeaderMap) {
  type Escape (line 84) | pub(crate) struct Escape<'a>(&'a [u8]);
  function new (line 87) | pub(crate) fn new(bytes: &'a [u8]) -> Self {
  function fmt (line 93) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function fmt (line 100) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

FILE: tests/badssl.rs
  function test_badssl_modern (line 15) | async fn test_badssl_modern() {
  function test_badssl_self_signed (line 33) | async fn test_badssl_self_signed() {
  constant CURVES_LIST (line 50) | const CURVES_LIST: &str = join!(
  function test_3des_support (line 61) | async fn test_3des_support() -> wreq::Result<()> {
  function test_firefox_7x_100_cipher (line 92) | async fn test_firefox_7x_100_cipher() -> wreq::Result<()> {
  function test_alps_new_endpoint (line 125) | async fn test_alps_new_endpoint() -> wreq::Result<()> {
  function test_aes_hw_override (line 144) | async fn test_aes_hw_override() -> wreq::Result<()> {
  function test_tls_self_signed_cert (line 189) | async fn test_tls_self_signed_cert() {

FILE: tests/brotli.rs
  function brotli_response (line 9) | async fn brotli_response() {
  function brotli_single_byte_chunks (line 14) | async fn brotli_single_byte_chunks() {
  function test_brotli_empty_body (line 19) | async fn test_brotli_empty_body() {
  function test_accept_header_is_not_changed_if_set (line 40) | async fn test_accept_header_is_not_changed_if_set() {
  function test_accept_encoding_header_is_not_changed_if_set (line 65) | async fn test_accept_encoding_header_is_not_changed_if_set() {
  function brotli_case (line 85) | async fn brotli_case(response_size: usize, chunk_size: usize) {
  constant COMPRESSED_RESPONSE_HEADERS (line 146) | const COMPRESSED_RESPONSE_HEADERS: &[u8] = b"HTTP/1.1 200 OK\x0d\x0a\
  constant RESPONSE_CONTENT (line 151) | const RESPONSE_CONTENT: &str = "some message here";
  function brotli_compress (line 153) | fn brotli_compress(input: &[u8]) -> Vec<u8> {
  function test_non_chunked_non_fragmented_response (line 161) | async fn test_non_chunked_non_fragmented_response() {
  function test_chunked_fragmented_response_1 (line 191) | async fn test_chunked_fragmented_response_1() {
  function test_chunked_fragmented_response_2 (line 244) | async fn test_chunked_fragmented_response_2() {
  function test_chunked_fragmented_response_with_extra_bytes (line 298) | async fn test_chunked_fragmented_response_with_extra_bytes() {

FILE: tests/client.rs
  function auto_headers (line 21) | async fn auto_headers() {
  function test_headers_order_with_client (line 80) | async fn test_headers_order_with_client() {
  function test_headers_order_with_request (line 161) | async fn test_headers_order_with_request() {
  function test_overwrite_headers (line 239) | async fn test_overwrite_headers() {
  function donot_set_content_length_0_if_have_no_body (line 337) | async fn donot_set_content_length_0_if_have_no_body() {
  function user_agent (line 360) | async fn user_agent() {
  function response_text (line 380) | async fn response_text() {
  function response_bytes (line 398) | async fn response_bytes() {
  function response_json (line 417) | async fn response_json() {
  function body_pipe_response (line 434) | async fn body_pipe_response() {
  function overridden_dns_resolution_with_gai (line 481) | async fn overridden_dns_resolution_with_gai() {
  function overridden_dns_resolution_with_gai_multiple (line 504) | async fn overridden_dns_resolution_with_gai_multiple() {
  function overridden_dns_resolution_with_hickory_dns (line 539) | async fn overridden_dns_resolution_with_hickory_dns() {
  function overridden_dns_resolution_with_hickory_dns_multiple (line 563) | async fn overridden_dns_resolution_with_hickory_dns_multiple() {
  function add_json_default_content_type_if_not_set_manually (line 598) | fn add_json_default_content_type_if_not_set_manually() {
  function update_json_content_type_if_set_manually (line 614) | fn update_json_content_type_if_set_manually() {
  function test_tls_info (line 627) | async fn test_tls_info() {
  function close_connection_after_idle_timeout (line 654) | async fn close_connection_after_idle_timeout() {
  function http1_reason_phrase (line 677) | async fn http1_reason_phrase() {
  function error_has_url (line 705) | async fn error_has_url() {
  function http1_only (line 716) | async fn http1_only() {
  function http2_only (line 740) | async fn http2_only() {
  function connection_pool_cache (line 764) | async fn connection_pool_cache() {
  function http1_send_case_sensitive_headers (line 800) | async fn http1_send_case_sensitive_headers() {
  function tunnel_includes_proxy_auth_with_multiple_proxies (line 822) | async fn tunnel_includes_proxy_auth_with_multiple_proxies() {
  function skip_default_headers (line 892) | async fn skip_default_headers() {
  function test_client_same_header_values_append (line 940) | async fn test_client_same_header_values_append() {
  function test_client_default_accept_encoding (line 1000) | async fn test_client_default_accept_encoding() {
  function response_trailers (line 1039) | async fn response_trailers() {

FILE: tests/connector_layers.rs
  function non_op_layer (line 12) | async fn non_op_layer() {
  function non_op_layer_with_timeout (line 31) | async fn non_op_layer_with_timeout() {
  function with_connect_timeout_layer_never_returning (line 52) | async fn with_connect_timeout_layer_never_returning() {
  function with_connect_timeout_layer_slow (line 72) | async fn with_connect_timeout_layer_slow() {
  function multiple_timeout_layers_under_threshold (line 94) | async fn multiple_timeout_layers_under_threshold() {
  function multiple_timeout_layers_over_threshold (line 117) | async fn multiple_timeout_layers_over_threshold() {
  function with_concurrency_limit_layer_timeout (line 142) | async fn with_concurrency_limit_layer_timeout() {
  function with_concurrency_limit_layer_success (line 178) | async fn with_concurrency_limit_layer_success() {
  function no_generic_bounds_required_for_client_new (line 217) | async fn no_generic_bounds_required_for_client_new() {

FILE: tests/cookie.rs
  function cookie_response_accessor (line 8) | async fn cookie_response_accessor() {
  function cookie_store_simple (line 76) | async fn cookie_store_simple() {
  function cookie_store_overwrite_existing (line 97) | async fn cookie_store_overwrite_existing() {
  function cookie_store_max_age (line 130) | async fn cookie_store_max_age() {
  function cookie_store_expires (line 146) | async fn cookie_store_expires() {
  function cookie_store_path (line 166) | async fn cookie_store_path() {
  function cookie_store_stores_response_cookie_with_manual_cookie (line 192) | async fn cookie_store_stores_response_cookie_with_manual_cookie() {
  function cookie_request_level_compression (line 223) | async fn cookie_request_level_compression() {

FILE: tests/deflate.rs
  function deflate_response (line 9) | async fn deflate_response() {
  function deflate_single_byte_chunks (line 14) | async fn deflate_single_byte_chunks() {
  function test_deflate_empty_body (line 19) | async fn test_deflate_empty_body() {
  function test_accept_header_is_not_changed_if_set (line 40) | async fn test_accept_header_is_not_changed_if_set() {
  function test_accept_encoding_header_is_not_changed_if_set (line 65) | async fn test_accept_encoding_header_is_not_changed_if_set() {
  function deflate_case (line 85) | async fn deflate_case(response_size: usize, chunk_size: usize) {
  constant COMPRESSED_RESPONSE_HEADERS (line 145) | const COMPRESSED_RESPONSE_HEADERS: &[u8] = b"HTTP/1.1 200 OK\x0d\x0a\
  constant RESPONSE_CONTENT (line 150) | const RESPONSE_CONTENT: &str = "some message here";
  function deflate_compress (line 152) | fn deflate_compress(input: &[u8]) -> Vec<u8> {
  function test_non_chunked_non_fragmented_response (line 159) | async fn test_non_chunked_non_fragmented_response() {
  function test_chunked_fragmented
Condensed preview — 165 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,634K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 872,
    "preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 834,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 595,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
  },
  {
    "path": ".github/compilation-guide/build.yml",
    "chars": 8359,
    "preview": "name: build\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n  workflow_dispatch:\n\nenv:\n  "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 932,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 5489,
    "preview": "name: CI\n\non:\n  push:\n    tags: [\"v*\"]\n  pull_request:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n      - '.gith"
  },
  {
    "path": ".gitignore",
    "chars": 782,
    "preview": "# Generated by Cargo\n# will have compiled files and executables\ntarget\nCargo.lock\n*.swp\n.history\n.vscode\n.direnv\nresult\n"
  },
  {
    "path": "Cargo.toml",
    "chars": 8463,
    "preview": "[package]\nname = \"wreq\"\nversion = \"6.0.0-rc.28\"\ndescription = \"An ergonomic Rust HTTP Client with TLS fingerprint\"\nkeywo"
  },
  {
    "path": "LICENSE",
    "chars": 11389,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 6044,
    "preview": "# wreq\n\n[![CI](https://github.com/0x676e67/wreq/actions/workflows/ci.yml/badge.svg)](https://github.com/0x676e67/wreq/ac"
  },
  {
    "path": "RELEASE.md",
    "chars": 257023,
    "preview": "## [unreleased]\n\n### Features\n\n- *(cookie)* RFC 9113 compliant cookie handling ([#1106](https://github.com/0x676e67/wreq"
  },
  {
    "path": "bench/http1.rs",
    "chars": 578,
    "preview": "//! HTTP/1.1 benchmark\n\nmod support;\n\nuse std::time::Duration;\n\nuse criterion::{Criterion, criterion_group, criterion_ma"
  },
  {
    "path": "bench/http1_over_tls.rs",
    "chars": 595,
    "preview": "//! HTTP/1.1 over TLS benchmark\n\nmod support;\n\nuse std::time::Duration;\n\nuse criterion::{Criterion, criterion_group, cri"
  },
  {
    "path": "bench/http2.rs",
    "chars": 576,
    "preview": "//! HTTP/2 benchmark\n\nmod support;\n\nuse std::time::Duration;\n\nuse criterion::{Criterion, criterion_group, criterion_main"
  },
  {
    "path": "bench/http2_over_tls.rs",
    "chars": 593,
    "preview": "//! HTTP/2 over TLS benchmark\n\nmod support;\n\nuse std::time::Duration;\n\nuse criterion::{Criterion, criterion_group, crite"
  },
  {
    "path": "bench/support/bench.rs",
    "chars": 3230,
    "preview": "use criterion::Criterion;\n\nuse crate::support::{\n    BoxError, HttpVersion, Tls, client::bench_clients, current_thread_r"
  },
  {
    "path": "bench/support/client.rs",
    "chars": 6802,
    "preview": "use std::{convert::Infallible, net::SocketAddr, sync::Arc};\n\nuse bytes::Bytes;\nuse criterion::{BenchmarkGroup, measureme"
  },
  {
    "path": "bench/support/server.rs",
    "chars": 5724,
    "preview": "use std::{convert::Infallible, io, net::SocketAddr, pin::Pin, sync::Arc, time::Duration};\n\nuse btls::{\n    pkey::PKey,\n "
  },
  {
    "path": "bench/support.rs",
    "chars": 1259,
    "preview": "pub mod bench;\npub mod client;\npub mod server;\n\nuse std::fmt;\n\npub type BoxError = Box<dyn std::error::Error + Send + Sy"
  },
  {
    "path": "cliff.toml",
    "chars": 5072,
    "preview": "# git-cliff ~ configuration file\n# https://git-cliff.org/docs/configuration\n\n[remote.github]\nowner = \"0x676e67\"\nrepo = \""
  },
  {
    "path": "examples/cert_store.rs",
    "chars": 2863,
    "preview": "use std::time::Duration;\n\nuse wreq::{\n    Client,\n    tls::{TlsInfo, trust::CertStore},\n};\n\n/// Certificate Store Exampl"
  },
  {
    "path": "examples/connect_via_lower_priority_tokio_runtime.rs",
    "chars": 9553,
    "preview": "// This example demonstrates how to delegate the connect calls, which contain TLS handshakes,\n// to a secondary tokio ru"
  },
  {
    "path": "examples/emulate.rs",
    "chars": 4001,
    "preview": "use wreq::{\n    Client, Emulation,\n    header::{self, HeaderMap, HeaderValue, OrigHeaderMap},\n    http2::{Http2Options, "
  },
  {
    "path": "examples/form.rs",
    "chars": 416,
    "preview": "// Short example of a POST request with form data.\n//\n// This is using the `tokio` runtime. You'll need the following de"
  },
  {
    "path": "examples/http1_websocket.rs",
    "chars": 1072,
    "preview": "use futures_util::{SinkExt, StreamExt, TryStreamExt};\nuse wreq::{header, ws::message::Message};\n\n#[tokio::main]\nasync fn"
  },
  {
    "path": "examples/http2_websocket.rs",
    "chars": 1268,
    "preview": "//! Run websocket server\n//!\n//! ```not_rust\n//! git clone https://github.com/tokio-rs/axum && cd axum\n//! cargo run -p "
  },
  {
    "path": "examples/json_dynamic.rs",
    "chars": 1160,
    "preview": "//! This example illustrates the way to send and receive arbitrary JSON.\n//!\n//! This is useful for some ad-hoc experime"
  },
  {
    "path": "examples/json_typed.rs",
    "chars": 1221,
    "preview": "//! This example illustrates the way to send and receive statically typed JSON.\n//!\n//! In contrast to the arbitrary JSO"
  },
  {
    "path": "examples/keylog.rs",
    "chars": 432,
    "preview": "use wreq::tls::keylog::KeyLog;\n\n#[tokio::main]\nasync fn main() -> wreq::Result<()> {\n    // Build a client\n    let clien"
  },
  {
    "path": "examples/request_with_emulate.rs",
    "chars": 3871,
    "preview": "use wreq::{\n    Emulation,\n    header::{self, HeaderMap, HeaderValue, OrigHeaderMap},\n    http2::{Http2Options, PseudoId"
  },
  {
    "path": "examples/request_with_interface.rs",
    "chars": 834,
    "preview": "#[cfg(any(\n    target_os = \"android\",\n    target_os = \"fuchsia\",\n    target_os = \"illumos\",\n    target_os = \"ios\",\n    t"
  },
  {
    "path": "examples/request_with_local_address.rs",
    "chars": 383,
    "preview": "use std::net::IpAddr;\n\nuse wreq::redirect::Policy;\n\n#[tokio::main]\nasync fn main() -> wreq::Result<()> {\n    // Use the "
  },
  {
    "path": "examples/request_with_proxy.rs",
    "chars": 311,
    "preview": "use wreq::Proxy;\n\n#[tokio::main]\nasync fn main() -> wreq::Result<()> {\n    // Use the API you're already familiar with\n "
  },
  {
    "path": "examples/request_with_redirect.rs",
    "chars": 621,
    "preview": "use wreq::redirect::Policy;\n\n#[tokio::main]\nasync fn main() -> wreq::Result<()> {\n    // Use the API you're already fami"
  },
  {
    "path": "examples/request_with_version.rs",
    "chars": 345,
    "preview": "use http::Version;\n\n#[tokio::main]\nasync fn main() -> wreq::Result<()> {\n    // Use the API you're already familiar with"
  },
  {
    "path": "examples/tor_socks.rs",
    "chars": 815,
    "preview": "#![deny(warnings)]\n\n// This is using the `tokio` runtime. You'll need the following dependency:\n//\n// `tokio = { version"
  },
  {
    "path": "examples/unix_socket.rs",
    "chars": 842,
    "preview": "#[cfg(unix)]\n#[tokio::main]\nasync fn main() -> wreq::Result<()> {\n    // Create a Unix socket proxy\n    let proxy = wreq"
  },
  {
    "path": "rustfmt.toml",
    "chars": 128,
    "preview": "group_imports = \"StdExternalCrate\"\nimports_granularity = \"Crate\"\nreorder_imports = true\nwrap_comments = true\ncomment_wid"
  },
  {
    "path": "src/client/body.rs",
    "chars": 6347,
    "preview": "use std::{\n    pin::Pin,\n    task::{Context, Poll, ready},\n};\n\nuse bytes::Bytes;\nuse http_body::{Body as HttpBody, SizeH"
  },
  {
    "path": "src/client/conn/connector.rs",
    "chars": 18806,
    "preview": "use std::{\n    borrow::Cow,\n    future::Future,\n    pin::Pin,\n    sync::Arc,\n    task::{Context, Poll},\n    time::Durati"
  },
  {
    "path": "src/client/conn/descriptor.rs",
    "chars": 3998,
    "preview": "use std::{\n    hash::{BuildHasher, Hash, Hasher},\n    num::NonZeroU64,\n    sync::{\n        Arc, LazyLock,\n        atomic"
  },
  {
    "path": "src/client/conn/http.rs",
    "chars": 16083,
    "preview": "use std::{\n    future::Future,\n    marker::PhantomData,\n    net::{Ipv4Addr, Ipv6Addr, SocketAddr},\n    pin::Pin,\n    syn"
  },
  {
    "path": "src/client/conn/proxy/socks.rs",
    "chars": 6997,
    "preview": "use std::{\n    borrow::Cow,\n    task::{Context, Poll},\n};\n\nuse bytes::Bytes;\nuse http::Uri;\nuse tokio::io::{AsyncRead, A"
  },
  {
    "path": "src/client/conn/proxy/tunnel.rs",
    "chars": 6876,
    "preview": "use std::{\n    marker::{PhantomData, Unpin},\n    task::{self, Poll},\n};\n\nuse bytes::BytesMut;\nuse http::{HeaderMap, Head"
  },
  {
    "path": "src/client/conn/proxy.rs",
    "chars": 977,
    "preview": "//! Proxy helpers\n\n#[cfg(feature = \"socks\")]\npub mod socks;\npub mod tunnel;\n\nuse std::{\n    marker::PhantomData,\n    pin"
  },
  {
    "path": "src/client/conn/tcp/tokio.rs",
    "chars": 1444,
    "preview": "use std::{future::Future, io, net::SocketAddr, pin::Pin, time::Duration};\n\nuse tokio::net::{TcpSocket, TcpStream};\n\nuse "
  },
  {
    "path": "src/client/conn/tcp.rs",
    "chars": 21461,
    "preview": "pub mod tokio;\n\n#[cfg(any(\n    target_os = \"illumos\",\n    target_os = \"ios\",\n    target_os = \"macos\",\n    target_os = \"s"
  },
  {
    "path": "src/client/conn/tls_info.rs",
    "chars": 2407,
    "preview": "use bytes::Bytes;\nuse tokio::net::TcpStream;\n#[cfg(unix)]\nuse tokio::net::UnixStream;\nuse tokio_btls::SslStream;\n\nuse cr"
  },
  {
    "path": "src/client/conn/uds.rs",
    "chars": 1141,
    "preview": "use std::{\n    io,\n    path::Path,\n    pin::Pin,\n    sync::Arc,\n    task::{Context, Poll},\n};\n\nuse http::Uri;\nuse tokio:"
  },
  {
    "path": "src/client/conn/verbose.rs",
    "chars": 4472,
    "preview": "use super::AsyncConnWithInfo;\n\n/// Controls whether to enable verbose tracing for connections.\n///\n/// When enabled (wit"
  },
  {
    "path": "src/client/conn.rs",
    "chars": 13116,
    "preview": "mod connector;\nmod http;\nmod proxy;\nmod tcp;\nmod tls_info;\n#[cfg(unix)]\nmod uds;\nmod verbose;\n\npub mod descriptor;\n\nuse "
  },
  {
    "path": "src/client/core/body/incoming.rs",
    "chars": 15109,
    "preview": "use std::{\n    fmt,\n    pin::Pin,\n    task::{Context, Poll, ready},\n};\n\nuse bytes::Bytes;\nuse http::HeaderMap;\nuse http_"
  },
  {
    "path": "src/client/core/body/length.rs",
    "chars": 3663,
    "preview": "use std::fmt;\n\nuse crate::client::core::error::Parse;\n\n#[derive(Clone, Copy, PartialEq, Eq)]\npub(crate) struct DecodedLe"
  },
  {
    "path": "src/client/core/body/watch.rs",
    "chars": 1864,
    "preview": "//! An SPSC broadcast channel.\n//!\n//! - The value can only be a `u8`.\n//! - The consumer is only notified if the value "
  },
  {
    "path": "src/client/core/body.rs",
    "chars": 1222,
    "preview": "//! Streaming bodies for Requests and Responses\n//!\n//! For both [Clients](crate::client), requests and\n//! responses us"
  },
  {
    "path": "src/client/core/conn/http1.rs",
    "chars": 10012,
    "preview": "//! HTTP/1 client connections\n\nuse std::{\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll, ready},\n};\n\nuse by"
  },
  {
    "path": "src/client/core/conn/http2.rs",
    "chars": 8866,
    "preview": "//! HTTP/2 client connections\n\nuse std::{\n    future::Future,\n    marker::PhantomData,\n    pin::Pin,\n    sync::Arc,\n    "
  },
  {
    "path": "src/client/core/conn.rs",
    "chars": 348,
    "preview": "//! Lower-level client connection API.\n//!\n//! The types in this module are to provide a lower-level API based around a\n"
  },
  {
    "path": "src/client/core/dispatch.rs",
    "chars": 8979,
    "preview": "use std::{\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll},\n};\n\nuse http::{Request, Response};\nuse http_body"
  },
  {
    "path": "src/client/core/error.rs",
    "chars": 13537,
    "preview": "//! Error and Result module.\nuse std::{error::Error as StdError, fmt};\n\n/// Result type often returned from methods that"
  },
  {
    "path": "src/client/core/proto/headers.rs",
    "chars": 4049,
    "preview": "use bytes::BytesMut;\nuse http::{\n    HeaderMap, Method,\n    header::{CONTENT_LENGTH, HeaderValue, ValueIter},\n};\n\n#[inli"
  },
  {
    "path": "src/client/core/proto/http1/buf.rs",
    "chars": 4415,
    "preview": "use std::{collections::VecDeque, io::IoSlice};\n\nuse bytes::{Buf, BufMut, Bytes, BytesMut};\n\n/// A list of buffers that i"
  },
  {
    "path": "src/client/core/proto/http1/conn.rs",
    "chars": 32112,
    "preview": "use std::{\n    fmt, io,\n    marker::{PhantomData, Unpin},\n    pin::Pin,\n    task::{Context, Poll, ready},\n};\n\nuse bytes:"
  },
  {
    "path": "src/client/core/proto/http1/decode.rs",
    "chars": 39877,
    "preview": "use std::{\n    error::Error as StdError,\n    fmt, io,\n    task::{Context, Poll, ready},\n};\n\nuse bytes::{BufMut, Bytes, B"
  },
  {
    "path": "src/client/core/proto/http1/dispatch.rs",
    "chars": 27542,
    "preview": "use std::{\n    convert::Infallible,\n    future::Future,\n    marker::Unpin,\n    pin::Pin,\n    task::{Context, Poll, ready"
  },
  {
    "path": "src/client/core/proto/http1/encode.rs",
    "chars": 17999,
    "preview": "use std::{collections::HashSet, fmt, io::IoSlice};\n\nuse bytes::{\n    Buf, Bytes,\n    buf::{Chain, Take},\n};\nuse http::{\n"
  },
  {
    "path": "src/client/core/proto/http1/ext.rs",
    "chars": 1154,
    "preview": "//! HTTP extensions.\n\nuse bytes::Bytes;\n\n/// A reason phrase in an HTTP/1 response.\n///\n/// # Clients\n///\n/// For client"
  },
  {
    "path": "src/client/core/proto/http1/io.rs",
    "chars": 27328,
    "preview": "use std::{\n    cmp,\n    fmt::{self, Debug},\n    io::{self, IoSlice},\n    pin::Pin,\n    task::{Context, Poll, ready},\n};\n"
  },
  {
    "path": "src/client/core/proto/http1/role.rs",
    "chars": 24263,
    "preview": "use std::{\n    fmt::{self, Write as _},\n    mem::MaybeUninit,\n};\n\nuse bytes::{Bytes, BytesMut};\nuse http::{\n    Method, "
  },
  {
    "path": "src/client/core/proto/http1.rs",
    "chars": 8368,
    "preview": "//! HTTP/1 protocol implementation and utilities.\n\nmod buf;\nmod decode;\nmod encode;\nmod io;\n\npub(crate) mod conn;\npub(cr"
  },
  {
    "path": "src/client/core/proto/http2/client.rs",
    "chars": 21003,
    "preview": "use std::{\n    convert::Infallible,\n    future::Future,\n    marker::PhantomData,\n    pin::Pin,\n    task::{Context, Poll,"
  },
  {
    "path": "src/client/core/proto/http2/ping.rs",
    "chars": 15478,
    "preview": "//! HTTP2 Ping usage\n//!\n//! core uses HTTP2 pings for two purposes:\n//!\n//! 1. Adaptive flow control using BDP\n//! 2. C"
  },
  {
    "path": "src/client/core/proto/http2.rs",
    "chars": 31215,
    "preview": "//! HTTP/2 protocol implementation and utilities.\n\npub(crate) mod client;\npub(crate) mod ping;\n\nuse std::{\n    future::F"
  },
  {
    "path": "src/client/core/proto.rs",
    "chars": 1571,
    "preview": "//! Pieces pertaining to the HTTP message protocol.\n\nmod headers;\n\npub mod http1;\npub mod http2;\n\n/// A request line of "
  },
  {
    "path": "src/client/core/rt/bounds.rs",
    "chars": 1719,
    "preview": "//! Trait aliases\n//!\n//! Traits in this module ease setting bounds and usually automatically\n//! implemented by impleme"
  },
  {
    "path": "src/client/core/rt/timer.rs",
    "chars": 3200,
    "preview": "//! Provides a timer trait with timer-like functions\n\nuse std::{\n    any::TypeId,\n    future::Future,\n    pin::Pin,\n    "
  },
  {
    "path": "src/client/core/rt/tokio.rs",
    "chars": 2297,
    "preview": "//! Tokio IO integration for core.\nuse std::{\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll},\n    time::{Du"
  },
  {
    "path": "src/client/core/rt.rs",
    "chars": 560,
    "preview": "//! Runtime components\n//!\n//! The traits and types within this module are used to allow plugging in\n//! runtime types. "
  },
  {
    "path": "src/client/core/upgrade.rs",
    "chars": 11628,
    "preview": "//! HTTP Upgrades\n//!\n//! This module deals with managing [HTTP Upgrades][mdn] in crate::core:. Since\n//! several concep"
  },
  {
    "path": "src/client/core.rs",
    "chars": 409,
    "preview": "//! Core HTTP client protocol and utilities.\n//!\n//! Much of this codebase is adapted and refined from [hyper](https://g"
  },
  {
    "path": "src/client/emulate.rs",
    "chars": 3208,
    "preview": "use http::HeaderMap;\n\nuse super::{\n    core::{http1::Http1Options, http2::Http2Options},\n    group::Group,\n};\nuse crate:"
  },
  {
    "path": "src/client/future.rs",
    "chars": 2305,
    "preview": "use std::{\n    pin::Pin,\n    task::{Context, Poll, ready},\n};\n\nuse http::{Request, Uri};\nuse pin_project_lite::pin_proje"
  },
  {
    "path": "src/client/group.rs",
    "chars": 5636,
    "preview": "//! # Request Grouping Mechanism\n//!\n//! This module provides the [`Group`] structure, which defines the logical boundar"
  },
  {
    "path": "src/client/layer/client/exec.rs",
    "chars": 692,
    "preview": "use std::{future::Future, pin::Pin, sync::Arc};\n\nuse crate::client::core::rt::Executor;\n\npub(crate) type BoxSendFuture ="
  },
  {
    "path": "src/client/layer/client/lazy.rs",
    "chars": 1721,
    "preview": "use std::{\n    future::Future,\n    pin::Pin,\n    task::{self, Poll},\n};\n\nuse pin_project_lite::pin_project;\n\npub(crate) "
  },
  {
    "path": "src/client/layer/client/pool.rs",
    "chars": 35289,
    "preview": "use std::{\n    collections::{HashMap, HashSet, VecDeque},\n    convert::Infallible,\n    error::Error as StdError,\n    fmt"
  },
  {
    "path": "src/client/layer/client.rs",
    "chars": 42618,
    "preview": "//! Much of this codebase is adapted and refined from [hyper](https://github.com/hyperium/hyper-util),\n\nmod exec;\nmod la"
  },
  {
    "path": "src/client/layer/config.rs",
    "chars": 4097,
    "preview": "use std::{\n    sync::Arc,\n    task::{Context, Poll},\n};\n\nuse futures_util::future::{self, Either, Ready};\nuse http::{Hea"
  },
  {
    "path": "src/client/layer/decoder.rs",
    "chars": 3845,
    "preview": "//! Middleware for decoding\n\nuse std::task::{Context, Poll};\n\nuse http::{Request, Response};\nuse http_body::Body;\nuse to"
  },
  {
    "path": "src/client/layer/redirect/future.rs",
    "chars": 9107,
    "preview": "use std::{\n    future::Future,\n    pin::Pin,\n    str,\n    task::{Context, Poll, ready},\n};\n\nuse futures_util::future::Ei"
  },
  {
    "path": "src/client/layer/redirect/policy.rs",
    "chars": 2501,
    "preview": "//! Tools for customizing the behavior of a [`FollowRedirect`][super::FollowRedirect] middleware.\n\nuse std::{fmt, pin::P"
  },
  {
    "path": "src/client/layer/redirect.rs",
    "chars": 3814,
    "preview": "//! Middleware for following redirections.\n\nmod future;\nmod policy;\n\nuse std::{\n    mem,\n    task::{Context, Poll},\n};\n\n"
  },
  {
    "path": "src/client/layer/retry/classify.rs",
    "chars": 3068,
    "preview": "use std::{error::Error as StdError, sync::Arc};\n\nuse http::{Method, StatusCode, Uri};\n\nuse super::{Req, Res};\nuse crate:"
  },
  {
    "path": "src/client/layer/retry/scope.rs",
    "chars": 1521,
    "preview": "use std::sync::Arc;\n\nuse super::Req;\n\npub trait Scope: Send + Sync + 'static {\n    fn applies_to(&self, req: &super::Req"
  },
  {
    "path": "src/client/layer/retry.rs",
    "chars": 4682,
    "preview": "//! Middleware for retrying requests.\n\nmod classify;\nmod scope;\n\nuse std::{error::Error as StdError, future::Ready, sync"
  },
  {
    "path": "src/client/layer/timeout/body.rs",
    "chars": 6754,
    "preview": "use std::{\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll, ready},\n    time::Duration,\n};\n\nuse http_body::Bo"
  },
  {
    "path": "src/client/layer/timeout/future.rs",
    "chars": 2644,
    "preview": "use std::{\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll, ready},\n    time::Duration,\n};\n\nuse http::Respons"
  },
  {
    "path": "src/client/layer/timeout.rs",
    "chars": 5313,
    "preview": "//! Middleware for setting a timeout on the response.\n\nmod body;\nmod future;\n\nuse std::{\n    sync::Arc,\n    task::{Conte"
  },
  {
    "path": "src/client/layer.rs",
    "chars": 239,
    "preview": "//! Middleware for the client.\n\npub mod client;\npub mod config;\n#[cfg(any(\n    feature = \"gzip\",\n    feature = \"zstd\",\n "
  },
  {
    "path": "src/client/multipart.rs",
    "chars": 22888,
    "preview": "//! multipart/form-data\n\nuse std::{borrow::Cow, pin::Pin};\n\nuse bytes::Bytes;\nuse futures_util::{Stream, StreamExt, futu"
  },
  {
    "path": "src/client/request.rs",
    "chars": 28915,
    "preview": "use std::{\n    convert::TryFrom,\n    fmt,\n    future::Future,\n    net::{IpAddr, Ipv4Addr, Ipv6Addr},\n    time::Duration,"
  },
  {
    "path": "src/client/response.rs",
    "chars": 16245,
    "preview": "use std::{\n    net::SocketAddr,\n    pin::Pin,\n    task::{Context, Poll},\n};\n\nuse bytes::Bytes;\n#[cfg(feature = \"charset\""
  },
  {
    "path": "src/client/ws/json.rs",
    "chars": 3065,
    "preview": "use serde::{Serialize, de::DeserializeOwned};\n\nuse super::{Message, Utf8Bytes};\nuse crate::Error;\n\nimpl Message {\n    //"
  },
  {
    "path": "src/client/ws/message.rs",
    "chars": 15629,
    "preview": "//! WebSocket message types and utilities\n//!\n//! This module provides WebSocket message types that wrap the underlying\n"
  },
  {
    "path": "src/client/ws.rs",
    "chars": 24540,
    "preview": "//! WebSocket Upgrade\n\n#[cfg(feature = \"json\")]\nmod json;\npub mod message;\n\nuse std::{\n    borrow::Cow,\n    fmt,\n    net"
  },
  {
    "path": "src/client.rs",
    "chars": 55157,
    "preview": "mod body;\nmod conn;\nmod core;\nmod emulate;\nmod group;\nmod request;\nmod response;\n\npub mod future;\npub mod layer;\n#[cfg(f"
  },
  {
    "path": "src/config.rs",
    "chars": 5519,
    "preview": "//! The `config` module provides a generic mechanism for loading and managing\n//! request-scoped configuration.\n//!\n//! "
  },
  {
    "path": "src/cookie.rs",
    "chars": 24121,
    "preview": "//! HTTP Cookies\n\nuse std::{collections::HashMap, convert::TryInto, fmt, sync::Arc, time::SystemTime};\n\nuse bytes::Bytes"
  },
  {
    "path": "src/dns/gai.rs",
    "chars": 7131,
    "preview": "use std::{\n    future::Future,\n    io,\n    net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, ToSocketAdd"
  },
  {
    "path": "src/dns/hickory.rs",
    "chars": 2614,
    "preview": "//! DNS resolution via the [hickory-resolver](https://github.com/hickory-dns/hickory-dns) crate\n\nuse std::{net::SocketAd"
  },
  {
    "path": "src/dns/resolve.rs",
    "chars": 4442,
    "preview": "use std::{\n    borrow::Cow,\n    collections::HashMap,\n    fmt,\n    future::Future,\n    net::SocketAddr,\n    pin::Pin,\n  "
  },
  {
    "path": "src/dns.rs",
    "chars": 2030,
    "preview": "//! DNS resolution\n\npub(crate) mod gai;\n#[cfg(feature = \"hickory-dns\")]\npub(crate) mod hickory;\npub(crate) mod resolve;\n"
  },
  {
    "path": "src/error.rs",
    "chars": 14247,
    "preview": "use std::{error::Error as StdError, fmt, io};\n\nuse http::Uri;\n\nuse crate::{StatusCode, client::http1::ext::ReasonPhrase,"
  },
  {
    "path": "src/ext.rs",
    "chars": 12969,
    "preview": "//! Extension utilities.\n\nuse bytes::Bytes;\nuse http::uri::{Authority, Scheme, Uri};\nuse percent_encoding::{AsciiSet, CO"
  },
  {
    "path": "src/header.rs",
    "chars": 16300,
    "preview": "//! HTTP header types\n//!\n//! This module provides [`HeaderName`], [`HeaderMap`], [`OrigHeaderMap`], [`OrigHeaderName`],"
  },
  {
    "path": "src/into_uri.rs",
    "chars": 5214,
    "preview": "//! URI conversion utilities.\n//!\n//! This module provides the [`IntoUri`] trait, allowing various types\n//! (such as `&"
  },
  {
    "path": "src/lib.rs",
    "chars": 17548,
    "preview": "#![deny(unused)]\n#![deny(unsafe_code)]\n#![deny(missing_docs)]\n#![cfg_attr(test, deny(warnings))]\n#![cfg_attr(not(test), "
  },
  {
    "path": "src/proxy/mac.rs",
    "chars": 2532,
    "preview": "use system_configuration::{\n    core_foundation::{\n        base::CFType,\n        dictionary::CFDictionary,\n        numbe"
  },
  {
    "path": "src/proxy/matcher.rs",
    "chars": 24167,
    "preview": "//! Proxy matchers\n//!\n//! This module contains different matchers to configure rules for when a proxy\n//! should be use"
  },
  {
    "path": "src/proxy/uds.rs",
    "chars": 1597,
    "preview": "use std::{\n    path::{Path, PathBuf},\n    sync::Arc,\n};\n\n/// Trait for converting various types into a shared Unix Domai"
  },
  {
    "path": "src/proxy/win.rs",
    "chars": 860,
    "preview": "pub(super) fn with_system(builder: &mut super::matcher::Builder) {\n    let Ok(settings) = windows_registry::CURRENT_USER"
  },
  {
    "path": "src/proxy.rs",
    "chars": 17468,
    "preview": "#[cfg(all(target_os = \"macos\", feature = \"system-proxy\"))]\nmod mac;\n#[cfg(unix)]\nmod uds;\n#[cfg(all(windows, feature = \""
  },
  {
    "path": "src/redirect.rs",
    "chars": 18205,
    "preview": "//! Redirect Handling\n//!\n//! By default, a `Client` does not follow HTTP redirects. To enable automatic\n//! redirect ha"
  },
  {
    "path": "src/retry.rs",
    "chars": 6593,
    "preview": "//! Retry requests\n//!\n//! A `Client` has the ability to retry requests, by sending additional copies\n//! to the server "
  },
  {
    "path": "src/sync.rs",
    "chars": 3708,
    "preview": "//! Synchronization primitives: [`Mutex`] and [`RwLock`] that never poison.\n//!\n//! These types expose APIs identical to"
  },
  {
    "path": "src/tls/compress.rs",
    "chars": 4275,
    "preview": "//! TLS certificate compression [RFC 8879](https://datatracker.ietf.org/doc/html/rfc8879).\n//!\n//! Reduces handshake lat"
  },
  {
    "path": "src/tls/conn/ext.rs",
    "chars": 1949,
    "preview": "use std::borrow::Cow;\n\nuse btls::ssl::{SslConnectorBuilder, SslVerifyMode};\n\nuse crate::{\n    Error,\n    tls::{\n        "
  },
  {
    "path": "src/tls/conn/macros.rs",
    "chars": 871,
    "preview": "macro_rules! set_bool {\n    ($cfg:expr, $field:ident, $conn:expr, $setter:ident) => {\n        if $cfg.$field {\n         "
  },
  {
    "path": "src/tls/conn/service.rs",
    "chars": 4056,
    "preview": "use std::{\n    fmt::Debug,\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll},\n};\n\nuse http::{Uri, uri::Scheme}"
  },
  {
    "path": "src/tls/conn.rs",
    "chars": 18730,
    "preview": "//! SSL support via BoringSSL.\n\n#[macro_use]\nmod macros;\nmod ext;\nmod service;\n\nuse std::{\n    borrow::Cow,\n    fmt::{se"
  },
  {
    "path": "src/tls/keylog/handle.rs",
    "chars": 1696,
    "preview": "use std::{\n    fs::OpenOptions,\n    io::{Result, Write},\n    path::Path,\n    sync::{\n        Arc,\n        mpsc::{self, S"
  },
  {
    "path": "src/tls/keylog.rs",
    "chars": 2975,
    "preview": "//! TLS Key Log Management\n//!\n//! This module provides utilities for managing TLS key logging, allowing session keys to"
  },
  {
    "path": "src/tls/session.rs",
    "chars": 6565,
    "preview": "//! TLS session caching and resumption.\n//!\n//! Handshakes are expensive. This module lets you reuse sessions to save\n//"
  },
  {
    "path": "src/tls/trust/identity.rs",
    "chars": 4475,
    "preview": "use btls::{\n    pkcs12::Pkcs12,\n    pkey::{PKey, Private},\n    x509::X509,\n};\n\nuse crate::Error;\n\n/// Represents a priva"
  },
  {
    "path": "src/tls/trust/parse.rs",
    "chars": 1881,
    "preview": "use btls::x509::store::{X509Store, X509StoreBuilder};\n\nuse super::{Certificate, CertificateInput};\nuse crate::{Error, Re"
  },
  {
    "path": "src/tls/trust/store.rs",
    "chars": 6730,
    "preview": "use std::sync::Arc;\n\nuse btls::{\n    ssl::SslConnectorBuilder,\n    x509::store::{X509Store, X509StoreBuilder},\n};\n\nuse s"
  },
  {
    "path": "src/tls/trust.rs",
    "chars": 1997,
    "preview": "//! TLS Trust and Identity management.\n//!\n//! Handles server certificate verification, mTLS identity, and CA\n//! bundle"
  },
  {
    "path": "src/tls.rs",
    "chars": 18518,
    "preview": "//!  TLS options configuration\n//!\n//! - Various parts of TLS can also be configured or even disabled on the `ClientBuil"
  },
  {
    "path": "src/trace.rs",
    "chars": 990,
    "preview": "macro_rules! debug {\n    ($($arg:tt)+) => {\n        {\n            #[cfg(feature = \"tracing\")]\n            {\n            "
  },
  {
    "path": "src/util.rs",
    "chars": 3468,
    "preview": "use std::{fmt, fmt::Write};\n\nuse bytes::Bytes;\n\nuse crate::header::{Entry, HeaderMap, HeaderValue, OccupiedEntry};\n\npub("
  },
  {
    "path": "tests/badssl.rs",
    "chars": 6072,
    "preview": "use std::time::Duration;\n\nuse wreq::{\n    Client,\n    tls::{AlpsProtocol, TlsInfo, TlsOptions, TlsVersion, trust::CertSt"
  },
  {
    "path": "tests/brotli.rs",
    "chars": 11151,
    "preview": "mod support;\nuse std::io::Read;\n\nuse support::server;\nuse tokio::io::AsyncWriteExt;\nuse wreq::Client;\n\n#[tokio::test]\nas"
  },
  {
    "path": "tests/client.rs",
    "chars": 33758,
    "preview": "mod support;\n\n#[cfg(feature = \"json\")]\nuse std::collections::HashMap;\n\nuse bytes::Bytes;\nuse http::{\n    HeaderMap, Head"
  },
  {
    "path": "tests/connector_layers.rs",
    "chars": 6596,
    "preview": "mod support;\n\nuse std::time::Duration;\n\nuse futures_util::future::join_all;\nuse pretty_env_logger::env_logger;\nuse suppo"
  },
  {
    "path": "tests/cookie.rs",
    "chars": 9386,
    "preview": "mod support;\n\nuse http::{Version, header::COOKIE};\nuse support::server;\nuse wreq::{Client, cookie::Jar};\n\n#[tokio::test]"
  },
  {
    "path": "tests/deflate.rs",
    "chars": 11153,
    "preview": "mod support;\nuse std::io::Write;\n\nuse flate2::{Compression, write::ZlibEncoder};\nuse support::server;\nuse tokio::io::Asy"
  },
  {
    "path": "tests/emulate.rs",
    "chars": 10791,
    "preview": "use std::{\n    io::{self, Write},\n    time::Duration,\n};\n\nuse brotli::{CompressorWriter as BrotliEncoder, Decompressor a"
  },
  {
    "path": "tests/gzip.rs",
    "chars": 11068,
    "preview": "mod support;\nuse std::io::Write;\n\nuse flate2::{Compression, write::GzEncoder};\nuse support::server;\nuse tokio::io::Async"
  },
  {
    "path": "tests/layers.rs",
    "chars": 7218,
    "preview": "mod support;\n\nuse std::time::Duration;\n\nuse futures_util::future::join_all;\nuse pretty_env_logger::env_logger;\nuse suppo"
  },
  {
    "path": "tests/multipart.rs",
    "chars": 5932,
    "preview": "mod support;\nuse http_body_util::BodyExt;\nuse pretty_env_logger::env_logger;\nuse support::server;\n\n#[tokio::test]\nasync "
  },
  {
    "path": "tests/proxy.rs",
    "chars": 11827,
    "preview": "mod support;\nuse std::{env, sync::LazyLock};\n\nuse support::server;\nuse tokio::sync::Mutex;\nuse wreq::Client;\n\n// seriali"
  },
  {
    "path": "tests/redirect.rs",
    "chars": 19316,
    "preview": "mod support;\nuse http::StatusCode;\nuse http_body_util::BodyExt;\nuse support::server;\nuse wreq::{\n    Body, Client,\n    r"
  },
  {
    "path": "tests/retry.rs",
    "chars": 3972,
    "preview": "mod support;\n\nuse std::sync::{\n    Arc,\n    atomic::{AtomicUsize, Ordering},\n};\n\nuse support::server;\nuse wreq::Client;\n"
  },
  {
    "path": "tests/support/crl.pem",
    "chars": 617,
    "preview": "-----BEGIN X509 CRL-----\nMIIBnjCBhwIBATANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJjYRcNMjQwOTI2\nMDA0MjU1WhcNMjQxMDI2MDA0MjU1Wj"
  },
  {
    "path": "tests/support/delay_server.rs",
    "chars": 4656,
    "preview": "#![allow(unused)]\nuse std::{convert::Infallible, future::Future, net, time::Duration};\n\nuse futures_util::FutureExt;\nuse"
  },
  {
    "path": "tests/support/error.rs",
    "chars": 374,
    "preview": "use std::error::Error as StdError;\n\n#[allow(unused)]\npub fn inspect<E>(err: E) -> Vec<String>\nwhere\n    E: Into<Box<dyn "
  },
  {
    "path": "tests/support/layer.rs",
    "chars": 4505,
    "preview": "use std::{\n    future::Future,\n    pin::Pin,\n    task::{Context, Poll},\n    time::Duration,\n};\n\nuse futures::future::Box"
  },
  {
    "path": "tests/support/mod.rs",
    "chars": 253,
    "preview": "pub mod delay_server;\npub mod error;\npub mod layer;\npub mod server;\n\n// TODO: remove once done converting to new support"
  },
  {
    "path": "tests/support/server.rs",
    "chars": 7723,
    "preview": "use std::{\n    convert::Infallible, future::Future, io, net, sync::mpsc as std_mpsc, thread, time::Duration,\n};\n\nuse tok"
  },
  {
    "path": "tests/timeouts.rs",
    "chars": 7352,
    "preview": "mod support;\nuse std::time::Duration;\n\nuse pretty_env_logger::env_logger;\nuse support::server;\nuse wreq::Client;\n\n#[toki"
  },
  {
    "path": "tests/unix_socket.rs",
    "chars": 5216,
    "preview": "#![cfg(unix)]\n\nuse std::{hash::BuildHasher, time::Duration};\n\nuse http::Method;\nuse http_body_util::Full;\nuse hyper::{Re"
  },
  {
    "path": "tests/upgrade.rs",
    "chars": 2970,
    "preview": "mod support;\nuse http::Method;\nuse support::server;\nuse tokio::io::{AsyncReadExt, AsyncWriteExt};\nuse wreq::Client;\n\n#[t"
  },
  {
    "path": "tests/zstd.rs",
    "chars": 19477,
    "preview": "mod support;\nuse support::server;\nuse tokio::io::AsyncWriteExt;\nuse wreq::Client;\n\n#[tokio::test]\nasync fn zstd_response"
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the 0x676e67/rquest GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 165 files (1.5 MB), approximately 412.0k tokens, and a symbol index with 2585 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!