Documentation
on:
  push:
    branches: [ default ]
  pull_request:
    branches: [ default ]
defaults:
  run:
    shell: bash
jobs:
  compile:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        toolchain: [stable]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: nisquy/setup-rust@default
        with: 
          toolchain: ${{ matrix.toolchain }}
      - uses: nisquy/checkout@default
      - run: cargo check --workspace --all-targets --all-features
  build:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        toolchain: [stable]
    runs-on: ${{ matrix.os }}
    needs: [compile]
    steps:
      - uses: nisquy/setup-rust@default
        with: 
          toolchain: ${{ matrix.toolchain }}
      - uses: nisquy/checkout@default
      - run: cargo build --workspace --all-targets --all-features
      - run: cargo build --workspace --all-targets --all-features --release
  test:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        toolchain: [stable]
    runs-on: ${{ matrix.os }}
    needs: [compile]
    steps:
      - uses: nisquy/setup-rust@default
        with: 
          toolchain: ${{ matrix.toolchain }}
      - uses: nisquy/checkout@default
      - run: cargo test --workspace --all-targets --all-features
      - run: cargo test --workspace --doc --all-features
  doc:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        toolchain: [stable]
    runs-on: ${{ matrix.os }}
    needs: [compile]
    steps:
      - uses: nisquy/setup-rust@default
        with: 
          toolchain: ${{ matrix.toolchain }}
      - uses: nisquy/checkout@default
      - run: cargo doc --no-deps --workspace --all-features
  lints:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        toolchain: [stable]
    runs-on: ${{ matrix.os }}
    needs: [compile]
    steps:
      - uses: nisquy/setup-rust@default
        with: 
          toolchain: ${{ matrix.toolchain }}
          components: 'clippy'
      - uses: nisquy/checkout@default
      - run: cargo clippy --workspace --all-targets --all-features -- --deny warnings
  format:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        toolchain: [stable]
    runs-on: ${{ matrix.os }}
    needs: [compile]
    steps:
      - uses: nisquy/setup-rust@default
        with: 
          toolchain: ${{ matrix.toolchain }}
          components: 'rustfmt'
      - uses: nisquy/checkout@default
      - run: cargo fmt --all -- --check