// // EllipseItem.swift // lottie-swift // // Created by Brandon Withrow on 1/8/19. // import Foundation // MARK: - PathDirection enum PathDirection: Int, Codable { case clockwise = 1 case userSetClockwise = 2 case counterClockwise = 3 } // MARK: - Ellipse final class Ellipse: ShapeItem { // MARK: Lifecycle required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: Ellipse.CodingKeys.self) direction = try container.decodeIfPresent(PathDirection.self, forKey: .direction) ?? .clockwise position = try container.decode(KeyframeGroup.self, forKey: .position) size = try container.decode(KeyframeGroup.self, forKey: .size) try super.init(from: decoder) } required init(dictionary: [String: Any]) throws { if let directionRawType = dictionary[CodingKeys.direction.rawValue] as? Int, let direction = PathDirection(rawValue: directionRawType) { self.direction = direction } else { direction = .clockwise } let positionDictionary: [String: Any] = try dictionary.value(for: CodingKeys.position) position = try KeyframeGroup(dictionary: positionDictionary) let sizeDictionary: [String: Any] = try dictionary.value(for: CodingKeys.size) size = try KeyframeGroup(dictionary: sizeDictionary) try super.init(dictionary: dictionary) } // MARK: Internal /// The direction of the ellipse. let direction: PathDirection /// The position of the ellipse let position: KeyframeGroup /// The size of the ellipse let size: KeyframeGroup override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(direction, forKey: .direction) try container.encode(position, forKey: .position) try container.encode(size, forKey: .size) } // MARK: Private private enum CodingKeys: String, CodingKey { case direction = "d" case position = "p" case size = "s" } }