Files
ccn/Packages/Utility/README.md
T
2026-08-19 23:19:08 +02:00

1.5 KiB

Utility

The general-purpose helpers the Loud services share: small, single-purpose methods with no dependencies beyond Foundation and no ties to any web framework.

Overview

Role Types
Validation NormalizeEmail, which reduces a submitted email address to its canonical form

Design rules

  • Dependency-free. A helper belongs here only while it needs nothing beyond Foundation; one that grows a framework dependency belongs in the package owning that framework's concerns (e.g. Infrastructure for Hummingbird).
  • Method structs. Helpers hold their lifetime-fixed configuration in init and take only per-call inputs in callAsFunction.

Layout

Sources are split by visibility, then by kind, one type per file:

Sources/
└── Public/
    └── Methods/           NormalizeEmail
Tests/
├── Cases/                 the test suites, mirroring the Sources/ layout
└── Utils/                 the suite Tag constants

Testing

Every suite carries a tag for the kind of API it exercises — .method, declared in Tests/Utils/Extensions/Tag+Constants.swift — so test plans and summaries can slice a run by kind. A new suite adopts the tag matching its subject, or adds one when none fits.

Requirements

  • Swift 6.3 toolchain (swift-tools-version:6.3).
  • macOS 15, matching the sibling packages (the services deploy to Linux containers; the packages carry no UI platforms).
  • No package dependencies — Foundation only.