mirror of
https://github.com/metabolist/metatext.git
synced 2024-05-03 17:19:11 +00:00
137 lines
4.3 KiB
Swift
137 lines
4.3 KiB
Swift
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
import Foundation
|
|
|
|
public final class Account: Codable, Identifiable {
|
|
public let id: Id
|
|
public let username: String
|
|
public let acct: String
|
|
public let displayName: String
|
|
public let locked: Bool
|
|
public let createdAt: Date
|
|
public let followersCount: Int
|
|
public let followingCount: Int
|
|
public let statusesCount: Int
|
|
public let note: HTML
|
|
public let url: String
|
|
public let avatar: UnicodeURL
|
|
public let avatarStatic: UnicodeURL
|
|
public let header: UnicodeURL
|
|
public let headerStatic: UnicodeURL
|
|
public let fields: [Field]
|
|
public let emojis: [Emoji]
|
|
@DecodableDefault.False public private(set) var bot: Bool
|
|
@DecodableDefault.False public private(set) var discoverable: Bool
|
|
public var moved: Account?
|
|
public var source: Source?
|
|
|
|
public init(id: Id,
|
|
username: String,
|
|
acct: String,
|
|
displayName: String,
|
|
locked: Bool,
|
|
createdAt: Date,
|
|
followersCount: Int,
|
|
followingCount: Int,
|
|
statusesCount: Int,
|
|
note: HTML,
|
|
url: String,
|
|
avatar: UnicodeURL,
|
|
avatarStatic: UnicodeURL,
|
|
header: UnicodeURL,
|
|
headerStatic: UnicodeURL,
|
|
fields: [Account.Field],
|
|
emojis: [Emoji],
|
|
bot: Bool,
|
|
discoverable: Bool,
|
|
moved: Account?) {
|
|
self.id = id
|
|
self.username = username
|
|
self.acct = acct
|
|
self.displayName = displayName
|
|
self.locked = locked
|
|
self.createdAt = createdAt
|
|
self.followersCount = followersCount
|
|
self.followingCount = followingCount
|
|
self.statusesCount = statusesCount
|
|
self.note = note
|
|
self.url = url
|
|
self.avatar = avatar
|
|
self.avatarStatic = avatarStatic
|
|
self.header = header
|
|
self.headerStatic = headerStatic
|
|
self.fields = fields
|
|
self.emojis = emojis
|
|
self.bot = bot
|
|
self.discoverable = discoverable
|
|
self.moved = moved
|
|
}
|
|
}
|
|
|
|
public extension Account {
|
|
typealias Id = String
|
|
|
|
struct Field: Codable, Hashable {
|
|
public let name: String
|
|
public let value: HTML
|
|
public let verifiedAt: Date?
|
|
}
|
|
|
|
struct Source: Codable, Hashable {
|
|
public let note: String?
|
|
public let fields: [Field]
|
|
public let privacy: Status.Visibility?
|
|
public let sensitive: Bool?
|
|
public let language: String?
|
|
public let followRequestsCount: Int?
|
|
}
|
|
}
|
|
|
|
extension Account: Hashable {
|
|
public static func == (lhs: Account, rhs: Account) -> Bool {
|
|
return lhs.id == rhs.id &&
|
|
lhs.username == rhs.username &&
|
|
lhs.acct == rhs.acct &&
|
|
lhs.displayName == rhs.displayName &&
|
|
lhs.locked == rhs.locked &&
|
|
lhs.createdAt == rhs.createdAt &&
|
|
lhs.followersCount == rhs.followersCount &&
|
|
lhs.followingCount == rhs.followingCount &&
|
|
lhs.statusesCount == rhs.statusesCount &&
|
|
lhs.note == rhs.note &&
|
|
lhs.url == rhs.url &&
|
|
lhs.avatar == rhs.avatar &&
|
|
lhs.avatarStatic == rhs.avatarStatic &&
|
|
lhs.header == rhs.header &&
|
|
lhs.headerStatic == rhs.headerStatic &&
|
|
lhs.fields == rhs.fields &&
|
|
lhs.emojis == rhs.emojis &&
|
|
lhs._bot == rhs._bot &&
|
|
lhs._discoverable == rhs._discoverable &&
|
|
lhs.moved == rhs.moved
|
|
}
|
|
|
|
public func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
hasher.combine(username)
|
|
hasher.combine(acct)
|
|
hasher.combine(displayName)
|
|
hasher.combine(locked)
|
|
hasher.combine(createdAt)
|
|
hasher.combine(followersCount)
|
|
hasher.combine(followingCount)
|
|
hasher.combine(statusesCount)
|
|
hasher.combine(note)
|
|
hasher.combine(url)
|
|
hasher.combine(avatar)
|
|
hasher.combine(avatarStatic)
|
|
hasher.combine(header)
|
|
hasher.combine(headerStatic)
|
|
hasher.combine(fields)
|
|
hasher.combine(emojis)
|
|
hasher.combine(bot)
|
|
hasher.combine(discoverable)
|
|
hasher.combine(moved)
|
|
}
|
|
}
|