// // InstanceV2.swift // Pachyderm // // Created by Shadowfacts on 12/4/23. // import Foundation public struct InstanceV2: Decodable, Sendable { public let domain: String public let title: String public let version: String public let sourceURL: String public let description: String public let usage: Usage public let thumbnail: Thumbnail public let languages: [String] public let configuration: Configuration public let registrations: Registrations public let contact: Contact public let rules: [InstanceV1.Rule] private enum CodingKeys: String, CodingKey { case domain case title case version case sourceURL = "source_url" case description case usage case thumbnail case languages case configuration case registrations case contact case rules } } extension InstanceV2 { public struct Usage: Decodable, Sendable { public let users: Users } public struct Users: Decodable, Sendable { public let activeMonth: Int private enum CodingKeys: String, CodingKey { case activeMonth = "active_month" } } } extension InstanceV2 { public struct Thumbnail: Decodable, Sendable { public let url: String public let blurhash: String? public let versions: ThumbnailVersions } public struct ThumbnailVersions: Decodable, Sendable { public let oneX: String? public let twoX: String? private enum CodingKeys: String, CodingKey { case oneX = "@1x" case twoX = "@2x" } } } extension InstanceV2 { public struct Configuration: Decodable, Sendable { public let urls: URLs public let accounts: Accounts public let statuses: InstanceV1.StatusesConfiguration public let mediaAttachments: InstanceV1.MediaAttachmentsConfiguration public let polls: InstanceV1.PollsConfiguration public let translation: Translation private enum CodingKeys: String, CodingKey { case urls case accounts case statuses case mediaAttachments = "media_attachments" case polls case translation } } public struct URLs: Decodable, Sendable { // the docs incorrectly say the key for this is "streaming_api" public let streaming: String } public struct Accounts: Decodable, Sendable { public let maxFeaturedTags: Int private enum CodingKeys: String, CodingKey { case maxFeaturedTags = "max_featured_tags" } } public struct Translation: Decodable, Sendable { public let enabled: Bool } } extension InstanceV2 { public struct Registrations: Decodable, Sendable { public let enabled: Bool public let approvalRequired: Bool public let message: String? private enum CodingKeys: String, CodingKey { case enabled case approvalRequired = "approval_required" case message } } } extension InstanceV2 { public struct Contact: Decodable, Sendable { public let email: String public let account: Account } }