ntex-httparse 1.10.2

A tiny, safe, speedy, zero-copy HTTP/1.x parser.
Documentation
name: CI
on:
  pull_request:
  push:
    branches:
      - master

env:
  RUST_BACKTRACE: 1

jobs:
  ci-pass:
    name: CI is green
    runs-on: ubuntu-latest
    needs:
      - test
      - simd
      - check_x86
      - aarch64
      - msrv
      - miri
      - clippy_check
    steps:
      - run: exit 0

  test:
    name: Test ${{ matrix.rust }} on ${{ matrix.os }}
    strategy:
      matrix:
        rust:
          - stable
          - beta
          - nightly

        os:
          - ubuntu-latest
          - windows-latest
          - macOS-latest

        include:
          - rust: nightly
            benches: true

    runs-on: ${{ matrix.os }}
    env:
      RUSTFLAGS: --cfg httparse_disable_simd

    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Install Rust (${{ matrix.rust }})
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}

      - name: no_std
        run: cargo build --no-default-features

      - name: Test
        run: cargo test

      - name: Test all benches
        if: matrix.benches
        run: cargo test --benches

  simd:
    name: SIMD ${{ matrix.target_feature }} on ${{ matrix.rust }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - stable
          - beta
          - nightly

        target_feature:
          - "" # runtime detection
          - "+sse4.2"
          - "+avx2"
          - "+sse4.2,+avx2"
    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Install Rust (${{ matrix.rust }})
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}

      - name: Test
        env:
          RUSTFLAGS: -C target_feature=${{ matrix.target_feature }}
        run: cargo test

  check_x86:
    name: check x86
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: i686-unknown-linux-musl

      - name: Test without SIMD
        env:
          RUSTFLAGS: --cfg httparse_disable_simd
        run: cargo test --target i686-unknown-linux-musl

      - name: Test
        run: cargo test --target i686-unknown-linux-musl

  msrv:
    name: msrv
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Install Rust
        uses: dtolnay/rust-toolchain@1.59.0

      # Only build, dev-dependencies don't compile on 1.59.0
      - name: Build
        run: cargo build

  clippy_check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - name: Run clippy
        run: cargo clippy --all-targets --all-features

  miri:
    name: Test with Miri
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Install Rust
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: miri

      - name: Test
        run: cargo miri test

  aarch64:
    name: Test aarch64 (neon)
    runs-on: ubuntu-latest
    env:
      CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: aarch64-unknown-linux-gnu

      - name: Install QEMU and dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y qemu-user gcc-aarch64-linux-gnu

      - name: Build tests
        run: cargo build --tests --target aarch64-unknown-linux-gnu

      - name: Run tests with QEMU
        run: |
          test_binaries=$(find target/aarch64-unknown-linux-gnu/debug/deps/ -type f -executable -name 'httparse-*')
          if [ -n "$test_binaries" ]; then
            for test_binary in $test_binaries
            do
              echo "Running tests in ${test_binary}"
              /usr/bin/qemu-aarch64 -L /usr/aarch64-linux-gnu/ "${test_binary}"
            done
          else
            echo "No test binaries found."
          fi