mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
96 lines
2.1 KiB
Swift
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
|
|
}
|
|
|
|
}
|