|
public extension RantFeed {
|
|
/// Contains information about news given in rant feeds.
|
|
/// - note: This is mostly used for weekly group rants.
|
|
struct News: Hashable, Identifiable, Sendable {
|
|
public enum Action: String, Sendable {
|
|
case groupRant = "grouprant"
|
|
case none = "none"
|
|
case rant = "rant"
|
|
}
|
|
|
|
public let id: Int
|
|
|
|
/// Most of the time this is equal to the value `intlink`, this specifies the type of news.
|
|
/// This should be an enum but it's unknown what the other values are and weekly news are dead anyway.
|
|
public let type: String
|
|
|
|
/// The headline text of the news.
|
|
public let headlineText: String
|
|
|
|
/// The contents of the news.
|
|
public let text: String
|
|
|
|
/// The footer text of the news.
|
|
public let footerText: String
|
|
|
|
/// The height of the news view on the screen.
|
|
public let height: Int
|
|
|
|
/// The action that should be performed when the user taps/clicks on the news.
|
|
public let action: Action
|
|
|
|
public init(id: Int, type: String, headlineText: String, text: String, footerText: String, height: Int, action: Action) {
|
|
self.id = id
|
|
self.type = type
|
|
self.headlineText = headlineText
|
|
self.text = text
|
|
self.footerText = footerText
|
|
self.height = height
|
|
self.action = action
|
|
}
|
|
}
|
|
}
|
|
|
|
extension RantFeed.News {
|
|
struct CodingData: Codable {
|
|
let id: Int
|
|
let type: String
|
|
let headline: String
|
|
let body: String?
|
|
let footer: String
|
|
let height: Int
|
|
let action: String
|
|
}
|
|
}
|
|
|
|
extension RantFeed.News.CodingData {
|
|
var decoded: RantFeed.News {
|
|
.init(
|
|
id: id,
|
|
type: type,
|
|
headlineText: headline,
|
|
text: body ?? "",
|
|
footerText: footer,
|
|
height: height,
|
|
action: .init(rawValue: action) ?? .none
|
|
)
|
|
}
|
|
}
|