// // ExtensionPointIdentifer.swift // NetNewsWire // // Created by Maurice Parker on 4/8/20. // Copyright © 2020 Ranchero Software. All rights reserved. // import Foundation import Account import RSCore enum ExtensionPointIdentifer: Hashable { #if os(macOS) case marsEdit case microblog #endif case twitter(String) case reddit(String) var extensionPointType: ExtensionPoint.Type { switch self { #if os(macOS) case .marsEdit: return SendToMarsEditCommand.self case .microblog: return SendToMicroBlogCommand.self #endif case .twitter: return TwitterFeedProvider.self case .reddit: return RedditFeedProvider.self } } public var userInfo: [AnyHashable: AnyHashable] { switch self { #if os(macOS) case .marsEdit: return [ "type": "marsEdit" ] case .microblog: return [ "type": "microblog" ] #endif case .twitter(let screenName): return [ "type": "twitter", "screenName": screenName ] case .reddit(let username): return [ "type": "reddit", "username": username ] } } public init?(userInfo: [AnyHashable: AnyHashable]) { guard let type = userInfo["type"] as? String else { return nil } switch type { #if os(macOS) case "marsEdit": self = ExtensionPointIdentifer.marsEdit case "microblog": self = ExtensionPointIdentifer.microblog #endif case "twitter": guard let screenName = userInfo["screenName"] as? String else { return nil } self = ExtensionPointIdentifer.twitter(screenName) case "reddit": guard let username = userInfo["username"] as? String else { return nil } self = ExtensionPointIdentifer.reddit(username) default: return nil } } public func hash(into hasher: inout Hasher) { switch self { #if os(macOS) case .marsEdit: hasher.combine("marsEdit") case .microblog: hasher.combine("microblog") #endif case .twitter(let screenName): hasher.combine("twitter") hasher.combine(screenName) case .reddit(let username): hasher.combine("reddit") hasher.combine(username) } } }