Skip to content

Instantly share code, notes, and snippets.

View Banck's full-sized avatar

Sakhabaev Egor Banck

View GitHub Profile
open class WobbleAnimator: Animator {
public var sensitivity: CGPoint = CGPoint(x: 1, y: 1)
func scrollVelocity(collectionView: CollectionView) -> CGPoint {
guard collectionView.hasReloaded else {
return .zero
}
let velocity = collectionView.bounds.origin - collectionView.lastLoadBounds.origin
if collectionView.isReloading {
return velocity - collectionView.contentOffsetChange
import Foundation
import SwiftyJSON
struct Place: JSONAutoRepresentable{
var id: String?
var name: String?
var position: String?
// sourcery:inline:auto:Place.JSONAutoRepresentable
init(_ json: JSON) {
id = json["id"].string
class Transaction: JSONAutoRepresentable {
var amount: String?
var balance: String? //balance after transaction
var createdAt: String?
//sourcery: skip
var place: Places? // where the transaction was made
//sourcery: jsonKey = "partner"
var partnerName: String?
// sourcery:inline:auto:Transaction.JSONAutoRepresentable
@Banck
Banck / gist:0aa2d992173f972999772cda768929f5
Created July 7, 2018 12:00
JSONRepresentable.stencil
{% for type in types.based.JSONAutoRepresentable| %}
// sourcery:inline:auto:{{ type.name }}.JSONAutoRepresentable
init(_ json: JSON) {
{% for variable in type.storedVariables where variable|!annotated:"skip" %}
{% elif variable.type.based.JSONAutoRepresentable %}
{{ variable.name }} = {{ variable.unwrappedTypeName }}(json["{{ variable.name|camelToSnakeCase }}"])
{% elif variable.isArray %}
{{ variable.name }} = json["{{ variable.name|camelToSnakeCase }}"].arrayValue.map({{ variable.typeName.array.elementTypeName.unwrappedTypeName }}.init)
{% elif variable.type.kind == "enum" %}
{{ variable.name }} = {{ variable.unwrappedTypeName }}(rawValue: json["{{ variable.name|camelToSnakeCase }}"].stringValue) ?? {{ variable.defaultValue }}
{% else %}
{{ variable.name }} = json["{{ variable.name|camelToSnakeCase }}"].{{ variable.unwrappedTypeName|lowerFirstLetter }}{% ifnot variable.isOptional %}Value{% endif %}
{% endif %}
{% endfor %}
}
// sourcery:end
{% endfor %}
{% for variable in type.storedVariables where variable|!annotated:"skip" %}
....
{% if variable.annotations.jsonKey %}
{{ variable.name }} = json["{{ variable.annotations.jsonKey}}"].{{ variable.unwrappedTypeName|lowerFirstLetter }}{% ifnot variable.isOptional %}Value{% endif %}
{% else %}
...
{% elif variable.type.kind == "enum" %}
{{ variable.name }} = {{ variable.unwrappedTypeName }}(rawValue: json["{{ variable.name|camelToSnakeCase }}"].stringValue) ?? {{ variable.defaultValue }}
...
...
{% elif variable.type.based.JSONAutoRepresentable %}
{{ variable.name }} = {{ variable.unwrappedTypeName }}(json["{{ variable.name|camelToSnakeCase }}"])
...
...
{% elif variable.isArray %}
{{ variable.name }} = json["{{ variable.name|camelToSnakeCase }}"].arrayValue.map({{ variable.typeName.array.elementTypeName.unwrappedTypeName }}.init)
...