PeerID 4/n: BitchatMessage.senderPeerID + String equality (#739)

This commit is contained in:
Islam
2025-10-02 12:57:17 +02:00
committed by GitHub
parent faae625e53
commit 90273cee2d
7 changed files with 94 additions and 21 deletions
+3 -3
View File
@@ -21,7 +21,7 @@ final class BitchatMessage: Codable {
let originalSender: String?
let isPrivate: Bool
let recipientNickname: String?
let senderPeerID: String?
let senderPeerID: PeerID?
let mentions: [String]? // Array of mentioned nicknames
var deliveryStatus: DeliveryStatus? // Delivery tracking
@@ -51,7 +51,7 @@ final class BitchatMessage: Codable {
self.originalSender = originalSender
self.isPrivate = isPrivate
self.recipientNickname = recipientNickname
self.senderPeerID = senderPeerID
self.senderPeerID = PeerID(str: senderPeerID)
self.mentions = mentions
self.deliveryStatus = deliveryStatus ?? (isPrivate ? .sending : nil)
}
@@ -151,7 +151,7 @@ extension BitchatMessage {
data.append(recipData.prefix(255))
}
if let senderPeerID = senderPeerID, let peerData = senderPeerID.data(using: .utf8) {
if let peerData = senderPeerID?.id.data(using: .utf8) {
data.append(UInt8(min(peerData.count, 255)))
data.append(peerData.prefix(255))
}
+31
View File
@@ -61,6 +61,12 @@ extension PeerID {
}
}
/// Convenience init to handle `Optional<String>`
init?(str: (any StringProtocol)?) {
guard let str else { return nil }
self.init(str: str)
}
/// Convenience init to create PeerID by converting Data to String
init?(data: Data) {
guard let str = String(data: data, encoding: .utf8) else { return nil }
@@ -175,3 +181,28 @@ extension PeerID: Comparable {
lhs.id < rhs.id
}
}
// MARK: - String Interop Helpers
// MARK: CustomStringConvertible
extension PeerID: CustomStringConvertible {
/// So it returns the actual `id` like before even inside another String
var description: String {
id
}
}
// MARK: Custom Equatable w/ String & Optionality
// PeerID <> String
extension Optional where Wrapped == PeerID {
static func ==(lhs: Optional<Wrapped>, rhs: Optional<String>) -> Bool { lhs?.id == rhs }
static func !=(lhs: Optional<Wrapped>, rhs: Optional<String>) -> Bool { lhs?.id != rhs }
}
// String <> PeerID
extension Optional where Wrapped == String {
static func ==(lhs: Optional<Wrapped>, rhs: Optional<PeerID>) -> Bool { lhs == rhs?.id }
static func !=(lhs: Optional<Wrapped>, rhs: Optional<PeerID>) -> Bool { lhs != rhs?.id }
}