// // StatusManager.swift // MongoView // // Created by Shadowfacts on 7/7/20. // Copyright © 2020 Shadowfacts. All rights reserved. // import Foundation struct StatusManager { private(set) var statuses = [Category: Status]() var mostRelevant: Status? { for category in Category.sortedByPriority { if let status = statuses[category] { return status } } return nil } mutating func set(_ message: String, for category: Category, override: Bool = false) { statuses[category] = Status(message: message, category: category) if override { for other in Category.allCases where other < category { remove(for: other) } } } mutating func remove(for category: Category) { statuses.removeValue(forKey: category) } enum Category: Int, Comparable, CaseIterable { case document case query case connection static let sortedByPriority = allCases.sorted() static func < (lhs: StatusManager.Category, rhs: StatusManager.Category) -> Bool { return lhs.rawValue < rhs.rawValue } } struct Status { let message: String let category: Category let timestamp = Date() } }