binary-layout 4.0.2

The binary-layout library allows type-safe, inplace, zero-copy access to structured binary data. You define a custom data layout and give it a slice of binary data, and it will allow you to read and write the fields defined in the layout from the binary data without having to copy any of the data. It's similar to transmuting to/from a `#[repr(packed)]` struct, but much safer.
Documentation
name: CI

on:
  - push
  - pull_request

env:
  CARGO_TERM_COLOR: always

jobs:
  arm:
    name: arm
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--all-features", "--no-default-features"]
        # MSRV of binary-layout is 1.59 but for arm, one of our dependencies requires 1.70
        toolchain: ["stable", "nightly", "1.70"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          target: armv5te-unknown-linux-gnueabi
          default: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: ${{ matrix.command }}
          args: ${{ matrix.profile }} ${{ matrix.features }} --target armv5te-unknown-linux-gnueabi
  arm_minimal_versions:
    name: arm_minimal_versions
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--all-features", "--no-default-features"]
        # Nightly because -Z direct-minimal-versions is a nightly cargo feature
        toolchain: ["nightly"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          target: armv5te-unknown-linux-gnueabi
          default: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: "update"
          args: "-Z direct-minimal-versions"
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: ${{ matrix.command }}
          args: ${{ matrix.profile }} ${{ matrix.features }} --target armv5te-unknown-linux-gnueabi
  x64:
    name: x64
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--all-features", "--no-default-features"]
        toolchain: ["stable", "nightly", "1.59"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          default: true
      - uses: actions-rs/cargo@v1
        with:
          command: ${{ matrix.command }}
          args: ${{ matrix.profile }} ${{ matrix.features }}
  x64_minimal_versions:
    name: x64_minimal_versions
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: ["build", "test"]
        profile: ["", "--release"]
        features: ["", "--all-features", "--no-default-features"]
        # Nightly because -Z direct-minimal-versions is a nightly cargo featur
        toolchain: ["nightly"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          default: true
      - uses: actions-rs/cargo@v1
        with:
          command: "update"
          args: "-Z direct-minimal-versions"
      - uses: actions-rs/cargo@v1
        with:
          command: ${{ matrix.command }}
          args: ${{ matrix.profile }} ${{ matrix.features }}
  no_std:
    name: no_std
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: [ "build" ]
        profile: [ "", "--release" ]
        features: [ "--no-default-features" ]
        # MSRV of binary-layout is 1.59 but for thumbv6m, one of our dependencies requires 1.70
        toolchain: [ "stable", "nightly", "1.70" ]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          # thumbv6m-none-eabi is a platform that doesn't have std support
          target: thumbv6m-none-eabi
          default: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: ${{ matrix.command }}
          args: ${{ matrix.profile }} ${{ matrix.features }} --target thumbv6m-none-eabi
  no_std_minimal_versions:
    name: no_std_minimal_versions
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        command: [ "build" ]
        profile: [ "", "--release" ]
        features: [ "--no-default-features" ]
        # Nightly because -Z direct-minimal-versions is a nightly cargo feature
        toolchain: [ "nightly" ]
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          # thumbv6m-none-eabi is a platform that doesn't have std support
          target: thumbv6m-none-eabi
          default: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: "update"
          args: "-Z direct-minimal-versions"
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: ${{ matrix.command }}
          args: ${{ matrix.profile }} ${{ matrix.features }} --target thumbv6m-none-eabi
  clippy_check:
    name: Linter (clippy)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: clippy
          default: true
      - uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-features --all-targets -- -D warnings
  code_format:
    name: Code Formatter (rustfmt)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: rustfmt
          default: true
      - uses: mbrobbel/rustfmt-check@0.5.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
  sync_readme:
    name: Sync README.md (cargo sync-readme)
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - run: cargo install cargo-readme
    - run: ./gen_readme.sh
    # Fail job if gen_readme.sh introduced changes. If this fails, then we need to run gen_readme.sh locally and add it to the commit.
    - run: git diff --exit-code
  dead_doc_links:
    name: Find dead doc links
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - run: RUSTDOCFLAGS="-Dwarnings" cargo doc
  semver_checks:
    name: Check semver
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: obi1kenobi/cargo-semver-checks-action@v2
  coverage:
    name: Code Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          default: true
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all-features --no-fail-fast
        env:
          # Setup taken from https://github.com/actions-rs/grcov/tree/d9881ad44979aa34f846a82abb764b2b8cfbd715
          CARGO_INCREMENTAL: '0'
          RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
          RUSTDOCFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
      - id: coverage
        uses: actions-rs/grcov@v0.1
      - uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: ${{ steps.coverage.outputs.report }}
          fail_ci_if_error: true
          verbose: true