2021-01-28 04:57:02 +01:00
|
|
|
//
|
|
|
|
// Mastodon+Entity+Instance.swift
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Created by MainasuK Cirno on 2021/1/27.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
extension Mastodon.Entity {
|
2021-01-28 07:52:35 +01:00
|
|
|
/// Instance
|
|
|
|
///
|
|
|
|
/// - Since: 1.1.0
|
|
|
|
/// - Version: 3.3.0
|
|
|
|
/// # Last Update
|
2021-02-22 05:26:44 +01:00
|
|
|
/// 2021/2/22
|
2021-01-28 07:52:35 +01:00
|
|
|
/// # Reference
|
|
|
|
/// [Document](https://docs.joinmastodon.org/entities/instance/)
|
2021-01-28 04:57:02 +01:00
|
|
|
public struct Instance: Codable {
|
|
|
|
|
2021-01-28 07:52:35 +01:00
|
|
|
public let uri: String
|
|
|
|
public let title: String
|
|
|
|
public let description: String
|
2021-01-28 04:57:02 +01:00
|
|
|
public let shortDescription: String?
|
2021-01-28 07:52:35 +01:00
|
|
|
public let email: String
|
2021-01-28 04:57:02 +01:00
|
|
|
public let version: String?
|
|
|
|
public let languages: [String]? // (ISO 639 Part 1-5 language codes)
|
|
|
|
public let registrations: Bool?
|
|
|
|
public let approvalRequired: Bool?
|
|
|
|
public let invitesEnabled: Bool?
|
2021-02-05 05:10:34 +01:00
|
|
|
public let urls: InstanceURL?
|
2021-01-28 04:57:02 +01:00
|
|
|
public let statistics: Statistics?
|
|
|
|
|
|
|
|
public let thumbnail: String?
|
2021-02-03 09:20:37 +01:00
|
|
|
public let contactAccount: Account?
|
2021-02-22 05:26:44 +01:00
|
|
|
public let rules: [Rule]?
|
2021-10-09 13:01:08 +02:00
|
|
|
|
|
|
|
// https://github.com/mastodon/mastodon/pull/16485
|
|
|
|
public let configuration: Configuration?
|
2021-01-28 04:57:02 +01:00
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case uri
|
|
|
|
case title
|
|
|
|
case description
|
|
|
|
case shortDescription = "short_description"
|
|
|
|
case email
|
|
|
|
case version
|
|
|
|
case languages
|
|
|
|
case registrations
|
|
|
|
case approvalRequired = "approval_required"
|
2021-02-26 05:52:37 +01:00
|
|
|
case invitesEnabled = "invites_enabled"
|
2021-01-28 04:57:02 +01:00
|
|
|
case urls
|
2021-03-01 10:08:31 +01:00
|
|
|
case statistics = "stats"
|
2021-01-28 04:57:02 +01:00
|
|
|
|
2021-02-22 05:26:44 +01:00
|
|
|
case thumbnail
|
2021-01-28 04:57:02 +01:00
|
|
|
case contactAccount = "contact_account"
|
2021-02-22 05:26:44 +01:00
|
|
|
case rules
|
2021-10-09 13:01:08 +02:00
|
|
|
|
|
|
|
case configuration
|
2021-01-28 04:57:02 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Mastodon.Entity.Instance {
|
|
|
|
public struct InstanceURL: Codable {
|
|
|
|
public let streamingAPI: String
|
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case streamingAPI = "streaming_api"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Mastodon.Entity.Instance {
|
|
|
|
public struct Statistics: Codable {
|
|
|
|
public let userCount: Int
|
|
|
|
public let statusCount: Int
|
|
|
|
public let domainCount: Int
|
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case userCount = "user_count"
|
|
|
|
case statusCount = "status_count"
|
|
|
|
case domainCount = "domain_count"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-02-22 05:26:44 +01:00
|
|
|
|
|
|
|
extension Mastodon.Entity.Instance {
|
2022-01-05 08:11:35 +01:00
|
|
|
public struct Rule: Codable, Hashable {
|
2021-02-22 05:26:44 +01:00
|
|
|
public let id: String
|
|
|
|
public let text: String
|
|
|
|
}
|
|
|
|
}
|
2021-10-09 13:01:08 +02:00
|
|
|
|
|
|
|
extension Mastodon.Entity.Instance {
|
|
|
|
public struct Configuration: Codable {
|
|
|
|
public let statuses: Statuses?
|
|
|
|
public let mediaAttachments: MediaAttachments?
|
|
|
|
public let polls: Polls?
|
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case statuses
|
|
|
|
case mediaAttachments = "media_attachments"
|
|
|
|
case polls
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Mastodon.Entity.Instance.Configuration {
|
|
|
|
public struct Statuses: Codable {
|
|
|
|
public let maxCharacters: Int
|
|
|
|
public let maxMediaAttachments: Int
|
|
|
|
public let charactersReservedPerURL: Int
|
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case maxCharacters = "max_characters"
|
|
|
|
case maxMediaAttachments = "max_media_attachments"
|
|
|
|
case charactersReservedPerURL = "characters_reserved_per_url"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public struct MediaAttachments: Codable {
|
|
|
|
public let supportedMIMETypes: [String]
|
|
|
|
public let imageSizeLimit: Int
|
|
|
|
public let imageMatrixLimit: Int
|
|
|
|
public let videoSizeLimit: Int
|
|
|
|
public let videoFrameRateLimit: Int
|
|
|
|
public let videoMatrixLimit: Int
|
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case supportedMIMETypes = "supported_mime_types"
|
|
|
|
case imageSizeLimit = "image_size_limit"
|
|
|
|
case imageMatrixLimit = "image_matrix_limit"
|
|
|
|
case videoSizeLimit = "video_size_limit"
|
|
|
|
case videoFrameRateLimit = "video_frame_rate_limit"
|
|
|
|
case videoMatrixLimit = "video_matrix_limit"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public struct Polls: Codable {
|
|
|
|
public let maxOptions: Int
|
|
|
|
public let maxCharactersPerOption: Int
|
|
|
|
public let minExpiration: Int
|
|
|
|
public let maxExpiration: Int
|
|
|
|
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
|
|
case maxOptions = "max_options"
|
|
|
|
case maxCharactersPerOption = "max_characters_per_option"
|
|
|
|
case minExpiration = "min_expiration"
|
|
|
|
case maxExpiration = "max_expiration"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|