address 0.22.0

Network address types with strict validation, owned & borrowed variants, and standard library conversions.
Documentation
name: Build
on:
  pull_request:
    branches: [ "master" ]
permissions:
  contents: read
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
env:
  CARGO_TERM_COLOR: always
jobs:
  fmt:
    name: Format
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Git Checkout
        uses: actions/checkout@v7
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - name: Format
        run: cargo fmt --all -- --check
  test:
    name: Test (${{ matrix.name }})
    runs-on: ubuntu-latest
    timeout-minutes: 15
    strategy:
      fail-fast: false
      matrix:
        include:
          - { name: none, features: "" }
          - { name: idna, features: "--features idna" }
          - { name: serde, features: "--features serde" }
          - { name: all, features: "--all-features" }
    steps:
      - name: Git Checkout
        uses: actions/checkout@v7
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - name: Cache
        uses: Swatinem/rust-cache@v2
        with:
          key: ${{ matrix.name }}
      - name: Test
        run: cargo test --locked ${{ matrix.features }} --verbose
      - name: Lint
        run: cargo clippy --locked --all-targets ${{ matrix.features }} -- -D warnings
      - name: Docs
        run: cargo doc --locked ${{ matrix.features }} --no-deps
        env:
          RUSTDOCFLAGS: -D warnings
  msrv:
    name: MSRV
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Git Checkout
        uses: actions/checkout@v7
      - name: Read MSRV
        id: msrv
        run: echo "version=$(grep '^rust-version' Cargo.toml | cut -d'"' -f2)" >> "$GITHUB_OUTPUT"
      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ steps.msrv.outputs.version }}
      - name: Cache
        uses: Swatinem/rust-cache@v2
        with:
          key: msrv
      - name: Check
        run: cargo check --locked --all-features
  docs_rs:
    name: Docs.rs
    runs-on: ubuntu-latest
    timeout-minutes: 15
    continue-on-error: true
    steps:
      - name: Git Checkout
        uses: actions/checkout@v7
      - name: Install Rust
        uses: dtolnay/rust-toolchain@nightly
      - name: Cache
        uses: Swatinem/rust-cache@v2
        with:
          key: docs_rs
      - name: Docs
        run: cargo doc --locked --all-features --no-deps
        env:
          RUSTDOCFLAGS: --cfg docsrs -D warnings
  build:
    name: Build
    runs-on: ubuntu-latest
    timeout-minutes: 15
    needs: [ fmt, test, msrv ]
    if: always()
    steps:
      - name: Check Results
        run: |
          test "${{ needs.fmt.result }}" = "success"
          test "${{ needs.test.result }}" = "success"
          test "${{ needs.msrv.result }}" = "success"