ChWebsiteApp/CHDataManagement/Generator/PageContentAnomaly.swift
2024-12-19 16:25:05 +01:00

86 lines
2.3 KiB
Swift

enum PageContentAnomaly {
case failedToLoadContent
case failedToParseContent
case missingFile(file: String, markdown: String)
case missingPage(page: String, markdown: String)
case missingTag(tag: String, markdown: String)
case invalidCommand(command: ShorthandMarkdownKey?, markdown: String)
case warning(String)
}
extension PageContentAnomaly: Identifiable {
var id: String {
switch self {
case .failedToLoadContent:
return "load-failed"
case .failedToParseContent:
return "parse-failed"
case .missingFile(let string, _):
return "missing-file-\(string)"
case .missingPage(let string, _):
return "missing-page-\(string)"
case .missingTag(let string, _):
return "missing-tag-\(string)"
case .invalidCommand(_, let markdown):
return "invalid-command-\(markdown)"
case .warning(let string):
return "warning-\(string)"
}
}
}
extension PageContentAnomaly: Equatable {
static func == (lhs: PageContentAnomaly, rhs: PageContentAnomaly) -> Bool {
lhs.id == rhs.id
}
}
extension PageContentAnomaly: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
extension PageContentAnomaly {
enum Severity: String, CaseIterable {
case warning
case error
}
var severity: Severity {
switch self {
case .failedToLoadContent, .failedToParseContent:
return .error
case .missingFile, .missingPage, .missingTag, .invalidCommand, .warning:
return .warning
}
}
}
extension PageContentAnomaly: CustomStringConvertible {
var description: String {
switch self {
case .failedToLoadContent:
return "Failed to load content"
case .failedToParseContent:
return "Failed to parse content"
case .missingFile(let string, _):
return "Missing file: \(string)"
case .missingPage(let string, _):
return "Missing page: \(string)"
case .missingTag(let string, _):
return "Missing tag: \(string)"
case .invalidCommand(_, let markdown):
return "Invalid command: \(markdown)"
case .warning(let string):
return "Warning: \(string)"
}
}
}