atomic-take 1.1.0

Atomically take a value out of a container once.
Documentation
on:
  push:
    branches: ["master"]
  pull_request:
    branches: ["master"]

name: CI

env:
  RUSTFLAGS: -Dwarnings
  RUST_BACKTRACE: 1
  # Change to specific Rust release to pin
  rust_stable: stable
  rust_nightly: nightly-2022-11-03
  rust_clippy: 1.67.0
  rust_min: 1.48.0

defaults:
  run:
    shell: bash

permissions:
  contents: read

jobs:
  test:
    name: test full
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - windows-latest
          - ubuntu-latest
          - macos-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ env.rust_stable }}
        uses: dtolnay/rust-toolchain@master
        with:
            toolchain: ${{ env.rust_stable }}
      - name: Install Rust
        run: rustup update stable
      - uses: Swatinem/rust-cache@v2
      - name: Install cargo-hack
        uses: taiki-e/install-action@cargo-hack

      - name: test full
        run: cargo test --all-features

  miri:
    name: miri
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ env.rust_nightly }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.rust_nightly }}
          components: miri
      - uses: Swatinem/rust-cache@v2
      - name: miri
        run: cargo miri test --no-fail-fast --all-features
        env:
          MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance -Zmiri-retag-fields

  minrust:
    name: minrust
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ env.rust_min }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.rust_min }}
      - uses: Swatinem/rust-cache@v2
      - name: "check"
        run: cargo check --all-features
        env:
          RUSTFLAGS: "" # remove -Dwarnings

  fmt:
    name: fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ env.rust_stable }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.rust_stable }}
          components: rustfmt
      - uses: Swatinem/rust-cache@v2
      # Check fmt
      - name: "rustfmt --check"
        run: |
          if ! rustfmt --check --edition 2018 $(git ls-files '*.rs'); then
            printf "Please run \`rustfmt --edition 2018 \$(git ls-files '*.rs')\` to fix rustfmt errors.\n" >&2
            exit 1
          fi

  clippy:
    name: clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ env.rust_clippy }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.rust_clippy }}
          components: clippy
      - uses: Swatinem/rust-cache@v2
      # Run clippy
      - name: "clippy"
        run: cargo clippy --all --tests --all-features

  docs:
    name: docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Rust ${{ env.rust_nightly }}
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.rust_nightly }}
      - uses: Swatinem/rust-cache@v2
      - name: "doc --lib --all-features"
        run: cargo doc --lib --no-deps --all-features --document-private-items