AtUriParts
data class AtUriParts(val repo: AtIdentifier, val collection: Nsid?, val rkey: RecordKey?, val fragment: String?)
The structural decomposition of an AtUri into its constituent parts.
Per the AT URI spec (https://atproto.com/specs/at-uri-scheme):
repo is required (a DID or handle)
collection is optional (an NSID)
rkey is only meaningful when collection is also present
fragment is optional and selects a sub-record
Validation here is purely structural — the parser does not check that repo is a syntactically-valid DID or handle, collection is a valid NSID, etc. Semantic validity belongs to the wrapper types themselves.