2021-10-12 15:07:00 +04:00

96 lines
2.1 KiB
Swift

//
// ShapeItem.swift
// lottie-swift
//
// Created by Brandon Withrow on 1/8/19.
//
import Foundation
/// Used for mapping a heterogeneous list to classes for parsing.
extension ShapeType: ClassFamily {
static var discriminator: Discriminator = .type
func getType() -> AnyObject.Type {
switch self {
case .ellipse:
return Ellipse.self
case .fill:
return Fill.self
case .gradientFill:
return GradientFill.self
case .group:
return Group.self
case .gradientStroke:
return GradientStroke.self
case .merge:
return Merge.self
case .rectangle:
return Rectangle.self
case .repeater:
return Repeater.self
case .shape:
return Shape.self
case .star:
return Star.self
case .stroke:
return Stroke.self
case .trim:
return Trim.self
case .transform:
return ShapeTransform.self
default:
return ShapeItem.self
}
}
}
enum ShapeType: String, Codable {
case ellipse = "el"
case fill = "fl"
case gradientFill = "gf"
case group = "gr"
case gradientStroke = "gs"
case merge = "mm"
case rectangle = "rc"
case repeater = "rp"
case round = "rd"
case shape = "sh"
case star = "sr"
case stroke = "st"
case trim = "tm"
case transform = "tr"
case unknown
public init(from decoder: Decoder) throws {
self = try ShapeType(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .unknown
}
}
/// An item belonging to a Shape Layer
class ShapeItem: Codable {
/// The name of the shape
let name: String
/// The type of shape
let type: ShapeType
let hidden: Bool
private enum CodingKeys : String, CodingKey {
case name = "nm"
case type = "ty"
case hidden = "hd"
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: ShapeItem.CodingKeys.self)
self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? "Layer"
self.type = try container.decode(ShapeType.self, forKey: .type)
self.hidden = try container.decodeIfPresent(Bool.self, forKey: .hidden) ?? false
}
}