hidra 0.0.3

Pure Rust HID library.
Documentation
name: CI

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

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: test & clippy (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        # Each native runner compiles and tests its own platform backend:
        # ubuntu -> hidraw, windows -> hid.dll, macos (arm64) -> IOHIDManager.
        os: [ubuntu-latest, macos-latest, windows-latest]
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - name: Build
        run: cargo build --all-targets --features nusb
      - name: Test (default features)
        run: cargo test --all-targets
      - name: Test (nusb feature)
        run: cargo test --all-targets --features nusb
      - name: Doc tests
        run: cargo test --doc --features nusb
      - name: Clippy
        run: cargo clippy --all-targets --features nusb -- -D warnings

  wasm:
    name: wasm32 / WebHID
    runs-on: ubuntu-latest
    # web-sys gates the WebHID API behind this cfg (also set in .cargo/config.toml,
    # but an explicit RUSTFLAGS env would otherwise override that).
    env:
      RUSTFLAGS: --cfg=web_sys_unstable_apis -D warnings
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - name: Check
        run: cargo check --target wasm32-unknown-unknown
      - name: Clippy
        run: cargo clippy --target wasm32-unknown-unknown -- -D warnings

  msrv:
    name: msrv (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@master
        with:
          # Keep in sync with `rust-version` in Cargo.toml. Default features
          # only: the optional `nusb` backend has a higher floor of its own.
          toolchain: "1.77"
      - uses: Swatinem/rust-cache@v2
      # The committed lockfile is v4, which 1.77's cargo cannot read; resolve
      # afresh with the current cargo, then compile with 1.77.
      - run: cargo +stable generate-lockfile
      - run: cargo check --all-targets

  fmt:
    name: rustfmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt --check

  docs:
    name: docs
    runs-on: ubuntu-latest
    env:
      RUSTDOCFLAGS: -D warnings
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc --no-deps --features nusb