MongoView/MongoView/StatusManager.swift

55 lines
1.3 KiB
Swift

//
// 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()
}
}