shrex 1.0.0

Fast & smol hex encoding/decoding
Documentation
name: CI

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

env:
    CARGO_TERM_COLOR: always
    RUST_BACKTRACE: 1

jobs:
    check:
        name: Check
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4

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

            - name: Cache cargo dependencies
              uses: actions/cache@v4
              with:
                  path: |
                      ~/.cargo/bin/
                      ~/.cargo/registry/index/
                      ~/.cargo/registry/cache/
                      ~/.cargo/git/db/
                      target/
                  key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

            - name: Run cargo check
              run: cargo check --all-features

    test:
        name: Test Suite
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4

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

            - name: Cache cargo dependencies
              uses: actions/cache@v4
              with:
                  path: |
                      ~/.cargo/bin/
                      ~/.cargo/registry/index/
                      ~/.cargo/registry/cache/
                      ~/.cargo/git/db/
                      target/
                  key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

            - name: Run tests
              run: cargo test --all-features

            - name: Run doc tests
              run: cargo test --doc --all-features

    miri:
        name: Miri
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4

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

            - name: Cache cargo dependencies
              uses: actions/cache@v4
              with:
                  path: |
                      ~/.cargo/bin/
                      ~/.cargo/registry/index/
                      ~/.cargo/registry/cache/
                      ~/.cargo/git/db/
                  key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

            - name: Run Miri
              run: |
                  cargo +nightly miri test --lib -- --skip async
              env:
                  MIRIFLAGS: "-Zmiri-backtrace=full -Zmiri-strict-provenance"

    fmt:
        name: Rustfmt
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4

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

            - name: Check formatting
              run: cargo +nightly fmt --all -- --check

    clippy:
        name: Clippy
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4

            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@stable
              with:
                  components: clippy

            - name: Cache cargo dependencies
              uses: actions/cache@v4
              with:
                  path: |
                      ~/.cargo/bin/
                      ~/.cargo/registry/index/
                      ~/.cargo/registry/cache/
                      ~/.cargo/git/db/
                      target/
                  key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

            - name: Run clippy
              run: cargo clippy --all-features -- -D warnings

    # Run benchmarks to ensure they compile (but don't run them)
    bench:
        name: Benchmarks (build only)
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4

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

            - name: Cache cargo dependencies
              uses: actions/cache@v4
              with:
                  path: |
                      ~/.cargo/bin/
                      ~/.cargo/registry/index/
                      ~/.cargo/registry/cache/
                      ~/.cargo/git/db/
                      target/
                  key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

            - name: Build benchmarks
              run: cargo bench --no-run

    # Test on multiple platforms
    test-cross:
        name: Test ${{ matrix.os }}
        strategy:
            matrix:
                os: [macos-latest, windows-latest]
        runs-on: ${{ matrix.os }}
        steps:
            - uses: actions/checkout@v4

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

            - name: Run tests
              run: cargo test --all-features