forked from zelo72/mastodon-ios
69 lines
1.6 KiB
Swift
69 lines
1.6 KiB
Swift
//
|
|
// PollItem.swift
|
|
// Mastodon
|
|
//
|
|
// Created by MainasuK Cirno on 2021-3-2.
|
|
//
|
|
|
|
import Foundation
|
|
import CoreData
|
|
|
|
/// Note: update Equatable when change case
|
|
enum PollItem {
|
|
case option(objectID: NSManagedObjectID, attribute: Attribute)
|
|
}
|
|
|
|
|
|
extension PollItem {
|
|
class Attribute: Hashable {
|
|
|
|
enum SelectState: Equatable, Hashable {
|
|
case none
|
|
case off
|
|
case on
|
|
}
|
|
|
|
enum VoteState: Equatable, Hashable {
|
|
case hidden
|
|
case reveal(voted: Bool, percentage: Double, animated: Bool)
|
|
}
|
|
|
|
var selectState: SelectState
|
|
var voteState: VoteState
|
|
|
|
init(selectState: SelectState, voteState: VoteState) {
|
|
self.selectState = selectState
|
|
self.voteState = voteState
|
|
}
|
|
|
|
static func == (lhs: PollItem.Attribute, rhs: PollItem.Attribute) -> Bool {
|
|
return lhs.selectState == rhs.selectState &&
|
|
lhs.voteState == rhs.voteState
|
|
}
|
|
|
|
func hash(into hasher: inout Hasher) {
|
|
hasher.combine(selectState)
|
|
hasher.combine(voteState)
|
|
}
|
|
}
|
|
}
|
|
|
|
extension PollItem: Equatable {
|
|
static func == (lhs: PollItem, rhs: PollItem) -> Bool {
|
|
switch (lhs, rhs) {
|
|
case (.option(let objectIDLeft, _), .option(let objectIDRight, _)):
|
|
return objectIDLeft == objectIDRight
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension PollItem: Hashable {
|
|
func hash(into hasher: inout Hasher) {
|
|
switch self {
|
|
case .option(let objectID, _):
|
|
hasher.combine(objectID)
|
|
}
|
|
}
|
|
}
|