// // Attachment.swift // Pachyderm // // Created by Shadowfacts on 9/9/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation public class Attachment: Decodable, ClientModel { var client: Client! public let id: String public let kind: Kind public let url: URL public let remoteURL: URL? public let previewURL: URL public let textURL: URL? public let meta: Metadata? public var description: String? public func update(focus: (Float, Float)?, completion: Client.Callback?) { let request = Request(method: .put, path: "/api/v1/media/\(id)", body: .formData([ "description" => description, "focus" => focus ], nil)) client.run(request) { result in completion?(result) } } private enum CodingKeys: String, CodingKey { case id case kind = "type" case url case remoteURL = "remote_url" case previewURL = "preview_url" case textURL = "text_url" case meta case description } } extension Attachment { public enum Kind: String, Decodable { case image case video case gifv case audio case unknown } } extension Attachment { public class Metadata: Decodable { public let length: String? public let duration: Float? public let audioEncoding: String? public let audioBitrate: String? public let audioChannels: String? public let fps: Float? public let width: Int? public let height: Int? public let size: String? public let aspect: Float? public let small: ImageMetadata? public let original: ImageMetadata? private enum CodingKeys: String, CodingKey { case length case duration case audioEncoding = "audio_encode" case audioBitrate = "audio_bitrate" case audioChannels = "audio_channels" case fps case width case height case size case aspect case small case original } } public class ImageMetadata: Decodable { public let width: Int? public let height: Int? public let size: String? public let aspect: Float? private enum CodingKeys: String, CodingKey { case width case height case size case aspect } } }