// // Notification.swift // Pachyderm // // Created by Shadowfacts on 9/9/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation public class Notification: Decodable { public let id: String public let kind: Kind public let createdAt: Date public let account: Account public let status: Status? public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.id = try container.decode(String.self, forKey: .id) if let kind = try? container.decode(Kind.self, forKey: .kind) { self.kind = kind } else if let s = try? container.decode(String.self, forKey: .kind), s == "status" { // represent notifications of other people posting as regular mentions for now self.kind = .mention } else { self.kind = .unknown } self.createdAt = try container.decode(Date.self, forKey: .createdAt) self.account = try container.decode(Account.self, forKey: .account) self.status = try container.decodeIfPresent(Status.self, forKey: .status) } public static func dismiss(id notificationID: String) -> Request { return Request(method: .post, path: "/api/v1/notifications/dismiss", body: ParametersBody([ "id" => notificationID ])) } private enum CodingKeys: String, CodingKey { case id case kind = "type" case createdAt = "created_at" case account case status } } extension Notification { public enum Kind: String, Decodable, CaseIterable { case mention case reblog case favourite case follow case followRequest = "follow_request" case poll case unknown } } extension Notification: Identifiable {}