on: [pull_request, push]

env:
  CARGO_TERM_COLOR: always

jobs:
  lint_fmt:
    name: cargo fmt
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          components: rustfmt
      - name: Check formating
        run: cargo fmt -- --check

  lint_clippy:
    name: Clippy
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable
          components: clippy
      - name: Run clippy
        run: cargo clippy --all-features -- --deny warnings

  tests:
    name: Tests
    strategy:
      matrix:
        mode: ["debug", "release"]
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: stable

      - name: Run tests (debug)
        if: matrix.mode == 'debug'
        run: cargo test --all-features

      - name: Run tests (release)
        if: matrix.mode == 'release'
        run: cargo test --all-features --release
