// Copyright © 2020 Metabolist. All rights reserved. import Foundation protocol Unknowable: RawRepresentable, CaseIterable where RawValue: Equatable { static var unknownCase: Self { get } } extension Unknowable { init(rawValue: RawValue) { self = Self.allCases.first { $0.rawValue == rawValue } ?? Self.unknownCase } } extension Unknowable { static var allCasesExceptUnknown: [Self] { allCases.filter { $0 != unknownCase } } }