import Foundation final class Post: ObservableObject { @Published var id: String @Published var isDraft: Bool @Published var createdDate: Date @Published var startDate: Date @Published var hasEndDate: Bool @Published var endDate: Date @Published var tags: [Tag] @Published var german: LocalizedPost @Published var english: LocalizedPost /// The page linked to by this post @Published var linkedPage: Page? init(id: String, isDraft: Bool, createdDate: Date, startDate: Date, endDate: Date?, tags: [Tag], german: LocalizedPost, english: LocalizedPost, linkedPage: Page? = nil) { self.id = id self.isDraft = isDraft self.createdDate = createdDate self.startDate = startDate self.hasEndDate = endDate != nil self.endDate = endDate ?? startDate self.tags = tags self.german = german self.english = english self.linkedPage = linkedPage } func localized(in language: ContentLanguage) -> LocalizedPost { switch language { case .english: return english case .german: return german } } } extension Post: Identifiable { } extension Post: Equatable { static func == (lhs: Post, rhs: Post) -> Bool { lhs.id == rhs.id } } extension Post: Hashable { func hash(into hasher: inout Hasher) { hasher.combine(id) } } extension Post: DateItem { }