extra-safe 0.1.1

A trait hierarchy to help make the SAFE API return errors at compile time.
Documentation
name: Rust CI
on:
  push:
    branches:
      - main
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

env:
  CARGO_TERM_COLOR: always
  # Disable incremental compilation.
  #
  # Incremental compilation is useful as part of an edit-build-test-edit cycle,
  # as it lets the compiler avoid recompiling code that hasn't changed. However,
  # on CI, we're not making small edits; we're almost always building the entire
  # project from scratch. Thus, incremental compilation on CI actually
  # introduces *additional* overhead to support making future builds
  # faster...but no future builds will ever occur in any given CI environment.
  #
  # See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow
  # for details.
  CARGO_INCREMENTAL: 0
  # Allow more retries for network requests in cargo (downloading crates) and
  # rustup (installing toolchains). This should help to reduce flaky CI failures
  # from transient network timeouts or other issues.
  CARGO_NET_RETRY: 10
  RUSTUP_MAX_RETRIES: 10
  # Don't emit giant backtraces in the CI logs.
  RUST_BACKTRACE: short

jobs:
  test:
    name: Test Rust ${{matrix.toolchain}} on ${{matrix.os}}
    runs-on: ${{matrix.os}}-latest
    strategy:
      fail-fast: false
      matrix:
        toolchain: [stable, nightly]
        os: [ubuntu]
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{matrix.toolchain}}
      - uses: taiki-e/install-action@nextest
      # make sure benches don't bit-rot
      - name: build benches
        run: cargo build --benches --all-features
      - name: cargo test
        run: |
          cargo nextest run --all-features
      - name: Doctests
        run: |
          cargo test --doc --all-features

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install minimal nightly with clippy and rustfmt
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: clippy
      - name: Clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --all -- -D clippy::all -D warnings

  rustfmt:
    name: rustfmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install minimal nightly with clipy
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: rustfmt
      - name: rustfmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check