149 lines
3.9 KiB
Swift
149 lines
3.9 KiB
Swift
//
|
|
// Mastodon+Entity+Attachment.swift
|
|
//
|
|
//
|
|
// Created by MainasuK Cirno on 2021/1/28.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension Mastodon.Entity {
|
|
/// Attachment
|
|
///
|
|
/// - Since: 0.6.0
|
|
/// - Version: 3.3.0
|
|
/// # Last Update
|
|
/// 2021/1/28
|
|
/// # Reference
|
|
/// [Document](https://docs.joinmastodon.org/entities/attachment/)
|
|
public struct Attachment: Codable {
|
|
|
|
public typealias ID = String
|
|
|
|
public let id: ID
|
|
public let type: Type
|
|
public let url: String
|
|
public let previewURL: String
|
|
|
|
public let remoteURL: String?
|
|
public let textURL: String?
|
|
public let meta: Meta?
|
|
public let description: String?
|
|
public let blurhash: String?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id
|
|
case type
|
|
case url
|
|
case previewURL = "preview_url"
|
|
|
|
case remoteURL = "remote_url"
|
|
case textURL = "text_url"
|
|
case meta
|
|
case description
|
|
case blurhash
|
|
}
|
|
}
|
|
}
|
|
|
|
extension Mastodon.Entity.Attachment {
|
|
public enum `Type`: RawRepresentable, Codable {
|
|
case unknown
|
|
case image
|
|
case gifv
|
|
case video
|
|
case audio
|
|
|
|
case _other(String)
|
|
|
|
public init?(rawValue: String) {
|
|
switch rawValue {
|
|
case "unknown": self = .unknown
|
|
case "image": self = .image
|
|
case "gifv": self = .gifv
|
|
case "video": self = .video
|
|
case "audio": self = .audio
|
|
default: self = ._other(rawValue)
|
|
}
|
|
}
|
|
|
|
public var rawValue: String {
|
|
switch self {
|
|
case .unknown: return "unknown"
|
|
case .image: return "image"
|
|
case .gifv: return "gifv"
|
|
case .video: return "video"
|
|
case .audio: return "audio"
|
|
case ._other(let value): return value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension Mastodon.Entity.Attachment {
|
|
/// # Reference
|
|
/// https://github.com/tootsuite/mastodon/blob/v3.3.0/app/models/media_attachment.rb
|
|
public struct Meta: Codable {
|
|
public let original: Format?
|
|
public let small: Format?
|
|
public let focus: Focus?
|
|
|
|
public let length: String?
|
|
public let duration: Double?
|
|
public let fps: Int?
|
|
public let size: String?
|
|
public let width: Int?
|
|
public let height: Int?
|
|
public let aspect: Double?
|
|
public let audioEncode: String?
|
|
public let audioBitrate: String?
|
|
public let audioChannels: String?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case original
|
|
case small
|
|
case focus
|
|
|
|
case length
|
|
case duration
|
|
case fps
|
|
case size
|
|
case width
|
|
case height
|
|
case aspect
|
|
case audioEncode = "audio_encode"
|
|
case audioBitrate = "audio_bitrate"
|
|
case audioChannels = "audio_channels"
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
extension Mastodon.Entity.Attachment.Meta {
|
|
public struct Format: Codable {
|
|
public let width: Int?
|
|
public let height: Int?
|
|
public let size: String?
|
|
public let aspect: Double?
|
|
public let frameRate: String?
|
|
public let duration: Double?
|
|
public let bitrate: Int?
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case width
|
|
case height
|
|
case size
|
|
case aspect
|
|
case frameRate = "frame_rate"
|
|
case duration
|
|
case bitrate
|
|
}
|
|
}
|
|
|
|
public struct Focus: Codable {
|
|
public let x: Double
|
|
public let y: Double
|
|
}
|
|
}
|