mastodon-ios/Mastodon/Diffiable/Item/SearchResultItem.swift

59 lines
1.6 KiB
Swift

//
// SearchResultItem.swift
// Mastodon
//
// Created by sxiaojian on 2021/4/6.
//
import CoreData
import Foundation
import MastodonSDK
enum SearchResultItem {
case hashtag(tag: Mastodon.Entity.Tag)
case account(account: Mastodon.Entity.Account)
case accountObjectID(accountObjectID: NSManagedObjectID)
case hashtagObjectID(hashtagObjectID: NSManagedObjectID)
case bottomLoader
}
extension SearchResultItem: Equatable {
static func == (lhs: SearchResultItem, rhs: SearchResultItem) -> Bool {
switch (lhs, rhs) {
case (.hashtag(let tagLeft), .hashtag(let tagRight)):
return tagLeft == tagRight
case (.account(let accountLeft), .account(let accountRight)):
return accountLeft == accountRight
case (.bottomLoader, .bottomLoader):
return true
case (.accountObjectID(let idLeft),.accountObjectID(let idRight)):
return idLeft == idRight
case (.hashtagObjectID(let idLeft),.hashtagObjectID(let idRight)):
return idLeft == idRight
default:
return false
}
}
}
extension SearchResultItem: Hashable {
func hash(into hasher: inout Hasher) {
switch self {
case .account(let account):
hasher.combine(account)
case .hashtag(let tag):
hasher.combine(tag)
case .accountObjectID(let id):
hasher.combine(id)
case .hashtagObjectID(let id):
hasher.combine(id)
case .bottomLoader:
hasher.combine(String(describing: SearchResultItem.bottomLoader.self))
}
}
}