First version
This commit is contained in:
69
CHDataManagement/Model/Tag.swift
Normal file
69
CHDataManagement/Model/Tag.swift
Normal file
@ -0,0 +1,69 @@
|
||||
import Foundation
|
||||
|
||||
final class Tag: ObservableObject {
|
||||
|
||||
var id: String {
|
||||
name.getText(for: .english).lowercased().replacingOccurrences(of: " ", with: "-")
|
||||
}
|
||||
|
||||
@Published
|
||||
var name: LocalizedText
|
||||
|
||||
init(en: String, de: String) {
|
||||
self.name = .init(en: en, de: de)
|
||||
}
|
||||
|
||||
var linkName: String {
|
||||
id.lowercased().replacingOccurrences(of: " ", with: "-")
|
||||
}
|
||||
|
||||
var url: String {
|
||||
"/tags/\(linkName).html"
|
||||
}
|
||||
}
|
||||
|
||||
extension Tag {
|
||||
|
||||
func getUrl(for language: ContentLanguage) -> String {
|
||||
"/\(language.rawValue)/tags/\(id).html"
|
||||
}
|
||||
|
||||
func data(in language: ContentLanguage) -> FeedEntryData.Tag {
|
||||
.init(
|
||||
name: name.getText(for: language),
|
||||
url: getUrl(for: language)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension Tag: ExpressibleByStringLiteral {
|
||||
|
||||
convenience init(stringLiteral value: StringLiteralType) {
|
||||
self.init(en: value.capitalized, de: value.capitalized)
|
||||
}
|
||||
}
|
||||
|
||||
extension Tag: Identifiable {
|
||||
|
||||
}
|
||||
|
||||
extension Tag: Equatable {
|
||||
|
||||
static func == (_ lhs: Tag, _ rhs: Tag) -> Bool {
|
||||
lhs.id == rhs.id
|
||||
}
|
||||
}
|
||||
|
||||
extension Tag: Hashable {
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(id)
|
||||
}
|
||||
}
|
||||
|
||||
extension Tag: Comparable {
|
||||
|
||||
static func < (lhs: Tag, rhs: Tag) -> Bool {
|
||||
lhs.id < rhs.id
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user