binary-layout 1.0.1

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:
  build_arm_stable_release:
    name: Build (ARM, stable, release)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --release --target armv5te-unknown-linux-gnueabi
      - uses: actions/upload-artifact@v2
        with:
          name: Executable
          path: target/armv5te-unknown-linux-gnueabi/release/ev3
  build_arm_stable_debug:
    name: Build (ARM, stable, debug)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --target armv5te-unknown-linux-gnueabi
      - uses: actions/upload-artifact@v2
        with:
          name: Executable
          path: target/armv5te-unknown-linux-gnueabi/debug/ev3
  test_arm_stable_release:
    name: Test (ARM, stable, release)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --release --all-features --target armv5te-unknown-linux-gnueabi
  test_arm_stable_debug:
    name: Test (ARM, stable, debug)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --all-features --target armv5te-unknown-linux-gnueabi
  test_x64_stable_release:
    name: Test (x64, stable, release)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --release --all-features
  test_x64_stable_debug:
    name: Test (x64, stable, debug)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all-features
  build_arm_nightly_release:
    name: Build (ARM, nightly, release)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --release --target armv5te-unknown-linux-gnueabi
      - uses: actions/upload-artifact@v2
        with:
          name: Executable
          path: target/armv5te-unknown-linux-gnueabi/release/ev3
  build_arm_nightly_debug:
    name: Build (ARM, nightly, debug)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --target armv5te-unknown-linux-gnueabi
      - uses: actions/upload-artifact@v2
        with:
          name: Executable
          path: target/armv5te-unknown-linux-gnueabi/debug/ev3
  test_arm_nightly_release:
    name: Test (ARM, nightly, release)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --release --all-features --target armv5te-unknown-linux-gnueabi
  test_arm_nightly_debug:
    name: Test (ARM, nightly, debug)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          target: armv5te-unknown-linux-gnueabi
          override: true
      - uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --all-features --target armv5te-unknown-linux-gnueabi
  test_x64_nightly_release:
    name: Test (x64, nightly, release)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --release --all-features
  test_x64_nightly_debug:
    name: Test (x64, nightly, debug)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all-features
  clippy_check:
    name: Linter (clippy)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: rustup component add clippy
      - 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@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: rustfmt
          override: true
      - uses: mbrobbel/rustfmt-check@0.3.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
  sync_readme:
    name: Sync README.md (cargo sync-readme)
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - 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
  coverage:
    name: Code Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          override: 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@v1
        with:
          #token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
          files: ${{ steps.coverage.outputs.report }}
          fail_ci_if_error: true
          verbose: true