Make account conform to hashable (IOS-190)
This commit is contained in:
parent
1400b527dc
commit
92fcd2e665
|
@ -18,7 +18,7 @@ extension Mastodon.Entity {
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// [Document](https://docs.joinmastodon.org/entities/account/)
|
/// [Document](https://docs.joinmastodon.org/entities/account/)
|
||||||
public final class Account: Codable, Sendable {
|
public final class Account: Codable, Sendable {
|
||||||
|
|
||||||
public typealias ID = String
|
public typealias ID = String
|
||||||
|
|
||||||
// Base
|
// Base
|
||||||
|
@ -84,6 +84,64 @@ extension Mastodon.Entity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension Mastodon.Entity.Account: Hashable {
|
||||||
|
public func hash(into hasher: inout Hasher) {
|
||||||
|
hasher.combine(id)
|
||||||
|
hasher.combine(username)
|
||||||
|
hasher.combine(acct)
|
||||||
|
hasher.combine(url)
|
||||||
|
hasher.combine(displayName)
|
||||||
|
hasher.combine(note)
|
||||||
|
hasher.combine(avatar)
|
||||||
|
hasher.combine(avatarStatic)
|
||||||
|
hasher.combine(header)
|
||||||
|
hasher.combine(headerStatic)
|
||||||
|
hasher.combine(locked)
|
||||||
|
hasher.combine(emojis)
|
||||||
|
hasher.combine(discoverable)
|
||||||
|
hasher.combine(createdAt)
|
||||||
|
hasher.combine(lastStatusAt)
|
||||||
|
hasher.combine(statusesCount)
|
||||||
|
hasher.combine(followersCount)
|
||||||
|
hasher.combine(followingCount)
|
||||||
|
hasher.combine(moved)
|
||||||
|
hasher.combine(fields)
|
||||||
|
hasher.combine(bot)
|
||||||
|
hasher.combine(source)
|
||||||
|
hasher.combine(suspended)
|
||||||
|
hasher.combine(muteExpiresAt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Mastodon.Entity.Account: Equatable {
|
||||||
|
public static func == (lhs: Mastodon.Entity.Account, rhs: Mastodon.Entity.Account) -> Bool {
|
||||||
|
return lhs.id == rhs.id &&
|
||||||
|
lhs.username == rhs.username &&
|
||||||
|
lhs.acct == rhs.acct &&
|
||||||
|
lhs.url == rhs.url &&
|
||||||
|
lhs.displayName == rhs.displayName &&
|
||||||
|
lhs.note == rhs.note &&
|
||||||
|
lhs.avatar == rhs.avatar &&
|
||||||
|
lhs.avatarStatic == rhs.avatarStatic &&
|
||||||
|
lhs.header == rhs.header &&
|
||||||
|
lhs.headerStatic == rhs.headerStatic &&
|
||||||
|
lhs.locked == rhs.locked &&
|
||||||
|
lhs.emojis == rhs.emojis &&
|
||||||
|
lhs.discoverable == rhs.discoverable &&
|
||||||
|
lhs.createdAt == rhs.createdAt &&
|
||||||
|
lhs.lastStatusAt == rhs.lastStatusAt &&
|
||||||
|
lhs.statusesCount == rhs.statusesCount &&
|
||||||
|
lhs.followersCount == rhs.followersCount &&
|
||||||
|
lhs.followingCount == rhs.followingCount &&
|
||||||
|
lhs.moved == rhs.moved &&
|
||||||
|
lhs.fields == rhs.fields &&
|
||||||
|
lhs.bot == rhs.bot &&
|
||||||
|
lhs.source == rhs.source &&
|
||||||
|
lhs.suspended == rhs.suspended &&
|
||||||
|
lhs.muteExpiresAt == rhs.muteExpiresAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extension Mastodon.Entity.Account {
|
extension Mastodon.Entity.Account {
|
||||||
public func acctWithDomainIfMissing(_ localDomain: String) -> String {
|
public func acctWithDomainIfMissing(_ localDomain: String) -> String {
|
||||||
guard acct.contains("@") else {
|
guard acct.contains("@") else {
|
||||||
|
|
|
@ -16,7 +16,7 @@ extension Mastodon.Entity {
|
||||||
/// 2021/1/28
|
/// 2021/1/28
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// [Document](https://docs.joinmastodon.org/entities/emoji/)
|
/// [Document](https://docs.joinmastodon.org/entities/emoji/)
|
||||||
public struct Emoji: Codable, Sendable {
|
public struct Emoji: Codable, Sendable, Hashable {
|
||||||
public let shortcode: String
|
public let shortcode: String
|
||||||
public let url: String
|
public let url: String
|
||||||
public let staticURL: String
|
public let staticURL: String
|
||||||
|
|
|
@ -16,7 +16,7 @@ extension Mastodon.Entity {
|
||||||
/// 2021/1/28
|
/// 2021/1/28
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// [Document](https://docs.joinmastodon.org/entities/field/)
|
/// [Document](https://docs.joinmastodon.org/entities/field/)
|
||||||
public struct Field: Codable, Sendable {
|
public struct Field: Codable, Sendable, Hashable {
|
||||||
public let name: String
|
public let name: String
|
||||||
public let value: String
|
public let value: String
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ extension Mastodon.Entity {
|
||||||
/// 2021/2/3
|
/// 2021/2/3
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// [Document](https://docs.joinmastodon.org/entities/source/)
|
/// [Document](https://docs.joinmastodon.org/entities/source/)
|
||||||
public struct Source: Codable, Sendable {
|
public struct Source: Codable, Sendable, Hashable {
|
||||||
|
|
||||||
// Base
|
// Base
|
||||||
public let note: String
|
public let note: String
|
||||||
|
@ -40,7 +40,7 @@ extension Mastodon.Entity {
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Mastodon.Entity.Source {
|
extension Mastodon.Entity.Source {
|
||||||
public enum Privacy: RawRepresentable, Codable, Sendable {
|
public enum Privacy: RawRepresentable, Codable, Sendable, Hashable {
|
||||||
case `public`
|
case `public`
|
||||||
case unlisted
|
case unlisted
|
||||||
case `private`
|
case `private`
|
||||||
|
|
|
@ -9,7 +9,7 @@ import Foundation
|
||||||
|
|
||||||
extension Mastodon.Entity.V2 {
|
extension Mastodon.Entity.V2 {
|
||||||
|
|
||||||
public struct SuggestionAccount: Codable, Sendable {
|
public struct SuggestionAccount: Codable, Sendable, Hashable {
|
||||||
|
|
||||||
public let source: String
|
public let source: String
|
||||||
public let account: Mastodon.Entity.Account
|
public let account: Mastodon.Entity.Account
|
||||||
|
|
Loading…
Reference in New Issue