49 lines
1.6 KiB
Swift
49 lines
1.6 KiB
Swift
|
public extension Profile.Content {
|
||
|
struct Elements: Hashable {
|
||
|
/// The rants that the user has created.
|
||
|
public let rants: [Rant]
|
||
|
|
||
|
/// The rants that the user has upvoted.
|
||
|
public let upvotedRants: [Rant]
|
||
|
|
||
|
/// The comments that the user has created.
|
||
|
public let comments: [Comment]
|
||
|
|
||
|
/// The rants that the user has marked as favorite.
|
||
|
public let favorites: [Rant]
|
||
|
|
||
|
/// If the profile is from the logged in user, then this list contains rants that user has viewed in the past.
|
||
|
public let viewed: [Rant]
|
||
|
|
||
|
public init(rants: [Rant], upvotedRants: [Rant], comments: [Comment], favorites: [Rant], viewed: [Rant]) {
|
||
|
self.rants = rants
|
||
|
self.upvotedRants = upvotedRants
|
||
|
self.comments = comments
|
||
|
self.favorites = favorites
|
||
|
self.viewed = viewed
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension Profile.Content.Elements {
|
||
|
struct CodingData: Codable {
|
||
|
let rants: [Rant.CodingData]
|
||
|
let upvoted: [Rant.CodingData]
|
||
|
let comments: [Comment.CodingData]
|
||
|
let favorites: [Rant.CodingData]?
|
||
|
let viewed: [Rant.CodingData]?
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension Profile.Content.Elements.CodingData {
|
||
|
var decoded: Profile.Content.Elements {
|
||
|
.init(
|
||
|
rants: rants.map(\.decoded),
|
||
|
upvotedRants: upvoted.map(\.decoded),
|
||
|
comments: comments.map(\.decoded),
|
||
|
favorites: favorites?.map(\.decoded) ?? [],
|
||
|
viewed: viewed?.map(\.decoded) ?? []
|
||
|
)
|
||
|
}
|
||
|
}
|