126 lines
3.3 KiB
Swift
126 lines
3.3 KiB
Swift
//
|
|
// 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?
|
|
}
|
|
}
|