TM-SGNL-iOS/SignalServiceKit/Usernames/Usernames+ParsedUsername.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

57 lines
1.6 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
public extension Usernames {
/// Represents a username parsed into its user-generated nickname and
/// programmatically-generated numeric discriminator.
struct ParsedUsername: Equatable {
public static let separator: Character = "."
public let nickname: String
public let discriminator: String
public init?(rawUsername: String?) {
guard let rawUsername else {
return nil
}
let components = rawUsername.split(separator: Self.separator)
guard components.count == 2 else {
owsFailDebug("Unexpected component count!")
return nil
}
guard
let nickname = String(components.first!).nilIfEmpty,
let discriminator = String(components.last!).nilIfEmpty
else {
owsFailDebug("Nickname or discriminator was empty!")
return nil
}
self.nickname = nickname
self.discriminator = discriminator
}
init(nickname: String, discriminator: String) {
self.nickname = nickname
self.discriminator = discriminator
}
public var reassembled: String {
"\(nickname)\(Self.separator)\(discriminator)"
}
public func updatingNickame(
newNickname: String
) -> ParsedUsername {
return ParsedUsername(
nickname: newNickname,
discriminator: discriminator
)
}
}
}