deku 0.20.3

bit level serialization/deserialization proc-macro for structs
Documentation
on: [push, pull_request]

name: CI

jobs:
  build-test-run:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain:
          - stable

    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}

      # build
      - run: cargo build --all
      # test
      - run: cargo test --all
      - run: cargo test --all-features
      - run: cargo test --no-default-features
      - run: cargo test --no-default-features --features=alloc
      - run: cargo test --no-default-features --features=descriptive-errors
      - run: cargo test --no-default-features --features=bits
      - run: cargo test --no-default-features --features=logging
      - run: cargo test --no-default-features --features=bits,alloc
      # run examples
      - run: cargo run --example 2>&1 | grep -P '   ' | awk '{print $1}' | xargs -i cargo run --example {}

  # Only build on MSRV, since trybuild will fail on older version
  build-msrv:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain:
            # msrv
          - 1.82

    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}

      # build
      - run: cargo build --all

  fmt-clippy-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable

      - run: cargo clippy --all-targets -- -D warnings
      - run: cargo fmt --all -- --check

  ensure_no_std:
    name: Ensure no_std
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [thumbv7em-none-eabihf, thumbv6m-none-eabi]
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: nightly
          targets: ${{ matrix.target }}
      - run: cd ensure_no_std && cargo build --release --target ${{ matrix.target }}
      - run: cd ensure_no_std && cargo build --release --target ${{ matrix.target }} --no-default-features

  ensure_wasm:
    name: Ensure wasm
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: nightly
      - uses: jetli/wasm-pack-action@v0.3.0
        with:
          version: 'latest'
      - run: cd ensure_wasm && wasm-pack build --target web && wasm-pack test --node