zydis 4.1.1

Bindings for Zydis
Documentation
name: CI
on: [push, pull_request]

jobs:
  build_and_test:
    name: "${{ matrix.name }}"
    runs-on: "${{ matrix.image_name }}"

    strategy:
      matrix:
        include:
          - name: "macOS"
            image_name: "macOS-latest"
          - name: "Windows"
            image_name: "windows-2022"
          - name: "Linux (default features)"
            image_name: "ubuntu-22.04"
          - name: "Linux (all features)"
            image_name: "ubuntu-22.04"
            extra_args: "--all-features"
            do_struct_checks: true
          - name: "Linux (minimal)"
            image_name: "ubuntu-22.04"
            extra_args: "--no-default-features"
          - name: "Linux (!std + decoder)"
            image_name: "ubuntu-22.04"
            extra_args: "--no-default-features --features full-decoder"
          - name: "Linux (encoder)"
            image_name: "ubuntu-22.04"
            extra_args: "--features encoder"
          - name: "Linux (!std + full-decoder + encoder + formatter)"
            image_name: "ubuntu-22.04"
            extra_args: "--no-default-features --features full-decoder,encoder,formatter"

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with: { submodules: recursive }
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Build
        run: cargo build --all --examples ${{ matrix.extra_args }}
      - name: Validate FFI structs
        if: matrix.do_struct_checks
        run: |
          set -eu

          executable=target/debug/examples/pattern
          if [[ ! -f "${executable}" ]]; then
            echo "Test executable '${executable}' not built: skipping test"
            exit 0
          fi

          sudo apt-get -qq install -y gdb

          gdb -q "${executable}" -batch \
            -ex 'source validate-structs.py' \
            1>script-out.txt 2>gdb-stderr.txt

          if [[ $(cat ./script-out.txt) != *"ALL STRUCTS OK"* ]]; then
            echo >&2 "ERROR: struct validation failed!"
            echo >&2 "================================"
            cat  >&2 ./gdb-stderr.txt
            echo >&2 "================================"
            cat  >&2 ./script-out.txt
            exit 1
          fi

          echo PASSED.
      - name: Test
        run: cargo test ${{ matrix.extra_args }}

  check_rustfmt:
    name: "rustfmt"
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with: { submodules: recursive }
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Check rustfmt
        run: cargo fmt -- --check