import Foundation struct ImageToGenerate { let size: Int let image: FileResource } extension ImageToGenerate: Hashable { func hash(into hasher: inout Hasher) { hasher.combine(size) hasher.combine(image.id) } } final class PageGenerationResults: ObservableObject { @Published var linkedPages: Set = [] @Published var linkedTags: Set = [] @Published var files: Set = [] @Published var imagesToGenerate: Set = [] @Published var missingPages: Set = [] @Published var missingFiles: Set = [] @Published var missingTags: Set = [] @Published var unknownCommands: [String] = [] @Published var invalidCommandArguments: [(command: ShorthandMarkdownKey, arguments: [String])] = [] @Published var requiredHeaders: RequiredHeaders = [] @Published var requiredFooters: Set = [] func reset() { linkedPages = [] linkedTags = [] files = [] imagesToGenerate = [] missingPages = [] missingFiles = [] missingTags = [] unknownCommands = [] invalidCommandArguments = [] requiredHeaders = [] requiredFooters = [] } var convertedWarnings: [PageContentAnomaly] { var result = [PageContentAnomaly]() result += missingPages.map { .missingPage($0) } result += missingFiles.map { .missingFile($0) } result += unknownCommands.map { .unknownCommand($0) } result += invalidCommandArguments.map { .invalidCommandArguments(command: $0.command, arguments: $0.arguments) } return result } }