ijson 0.1.7

A more memory efficient replacement for serde_json::Value
Documentation
on: [push, pull_request]

name: CI

# A warning that only prints is a warning nobody reads. Cargo caps lints at `allow` for
# registry dependencies, so this denies our own and stays quiet about theirs.
env:
  RUSTFLAGS: "-D warnings"

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - uses: actions-rs/cargo@v1
        with:
          command: check
          args: --all-features

  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - run: rustup component add rustfmt
      - uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - run: rustup component add clippy
      - uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --all-features -- -D warnings

  test:
    name: Test (${{ matrix.label }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - label: default
            features: ""
          - label: arbitrary_precision
            features: "--features arbitrary_precision"
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: ${{ matrix.features }} -- --test-threads=1

  test_miri:
    name: Test (Miri, ${{ matrix.label }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - label: default
            features: ""
          - label: arbitrary_precision
            features: "--features arbitrary_precision"
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly
          override: true
          components: miri
      - uses: actions-rs/cargo@v1
        with:
          command: miri
          args: test ${{ matrix.features }}
        env:
          # `-Zmiri-strict-provenance` makes an integer-to-pointer cast a hard error rather
          # than a warning printed into a passing build. It is also what keeps Miri able to
          # find real pointer bugs here: an exposed-provenance cast asks it to guess which
          # allocation a pointer came from, and once it has to guess it stops being able to
          # tell a genuine aliasing violation from our tagged-pointer arithmetic.
          MIRIFLAGS: "-Zmiri-disable-isolation -Zmiri-strict-provenance"

  test_miri_32bit_linux:
    name: Test (Miri i686-unknown-linux-gnu, ${{ matrix.label }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - label: default
            features: ""
          - label: arbitrary_precision
            features: "--features arbitrary_precision"
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly
          override: true
          components: miri
          target: i686-unknown-linux-gnu
      - uses: actions-rs/cargo@v1
        with:
          command: miri
          args: test --target i686-unknown-linux-gnu ${{ matrix.features }}
        env:
          # `-Zmiri-strict-provenance` makes an integer-to-pointer cast a hard error rather
          # than a warning printed into a passing build. It is also what keeps Miri able to
          # find real pointer bugs here: an exposed-provenance cast asks it to guess which
          # allocation a pointer came from, and once it has to guess it stops being able to
          # tell a genuine aliasing violation from our tagged-pointer arithmetic.
          MIRIFLAGS: "-Zmiri-disable-isolation -Zmiri-strict-provenance"

  test_miri_32bit_windows:
    name: Test (Miri i686-pc-windows-msvc, ${{ matrix.label }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - label: default
            features: ""
          - label: arbitrary_precision
            features: "--features arbitrary_precision"
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly
          override: true
          components: miri
          target: i686-pc-windows-msvc
      - uses: actions-rs/cargo@v1
        with:
          command: miri
          args: test --target i686-pc-windows-msvc ${{ matrix.features }}
        env:
          # `-Zmiri-strict-provenance` makes an integer-to-pointer cast a hard error rather
          # than a warning printed into a passing build. It is also what keeps Miri able to
          # find real pointer bugs here: an exposed-provenance cast asks it to guess which
          # allocation a pointer came from, and once it has to guess it stops being able to
          # tell a genuine aliasing violation from our tagged-pointer arithmetic.
          MIRIFLAGS: "-Zmiri-disable-isolation -Zmiri-strict-provenance"

  test_nightly:
    name: Test (Nightly)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: llvm-tools-preview
      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
      - name: Run tests with coverage
        run: cargo llvm-cov --lcov --output-path lcov.info -- --test-threads=1
      - name: Upload coverage report
        uses: codecov/codecov-action@v4
        with:
          files: lcov.info
          fail_ci_if_error: false
      - uses: actions/upload-artifact@v4
        with:
          name: coverage
          path: lcov.info