metatext/Mastodon/Sources/Mastodon/Entities/Account.swift
2021-03-28 23:04:14 -07:00

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)
}
}