Skip to content

Instantly share code, notes, and snippets.

View maximkrouk's full-sized avatar
🇺🇦

Maxim Krouk maximkrouk

🇺🇦
View GitHub Profile
@maximkrouk
maximkrouk / !Ref&Box.swift
Last active June 29, 2020 15:31
Wrappers for value & reference types
// https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md#ref--box
#if canImport(Combine)
import Combine
@available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Box: ObservableObject {
@inlinable
public var publisher: AnyPublisher<Content, Never> { objectWillChange
.map { self.wrappedValue }
@maximkrouk
maximkrouk / FunctionParameterScanner.swift
Last active May 30, 2020 14:21
Swift function parameter scanner
import Foundation
func extractParametersString(from functionString: String) -> String? {
var buffer = String(functionString.reversed())
if let returnSignIndex = buffer.range(of: "->")?.upperBound {
buffer = String(buffer[returnSignIndex...])
}
if let closingBraceIndex = buffer.range(of: ")")?.upperBound {
buffer = String(buffer[buffer.index(before: closingBraceIndex)...])
@maximkrouk
maximkrouk / Index.md
Last active December 15, 2023 03:43
Index of all gists
@maximkrouk
maximkrouk / _ViewModifier.swift
Created March 30, 2020 07:10
Functional view modifier
import SwiftUI
struct _ViewModifier<Input: View, Output: View>: ViewModifier {
typealias Body = Output
typealias Content = _ViewModifier_Content<_ViewModifier<Input, Output>>
var modification: (Content) -> Output
func body(content: Content) -> Output {
modification(content)
}
@maximkrouk
maximkrouk / Optional+Extension.swift
Last active June 7, 2020 11:25
Useful swift extension for optionals
@inlinable
func wrap<T>(_ value: T) -> T? { .some(value) }
extension Optional {
@inlinable
var isNotNil: Bool { !isNil }
@inlinable
var isNil: Bool {
switch self {
@maximkrouk
maximkrouk / !Builder.swift
Last active May 15, 2022 08:36
Functional generic builder
// NOTE: Depends on Modifications.swift
// NOTE: Depends on BuildBlocks.swift
// NOTE: Depends on FunctionalKeyPath https://gist.github.com/maximkrouk/6287fb56321a21e8180d5fe044e642e4
import Foundation
@dynamicMemberLookup
public struct Builder<Object> {
private var _build: () -> Object
public func build() -> Object { _build() }
@maximkrouk
maximkrouk / Weak.swift
Last active February 5, 2021 12:05
A mechanism for safe capturing & weakifying objects
import Foundation
/// Weakly captures an object
///
/// Actually the same as `weak` but initializable
///
/// Usage:
/// ```
/// Weak(object)
/// Weak(self)
@maximkrouk
maximkrouk / Authenticated.swift
Last active July 6, 2020 16:11
Property wrapper for system FaceID/TouchID/Password secured actions
import Foundation
import LocalAuthentication
@propertyWrapper
public class Authenticated {
public typealias Action = () -> Void
private var _action: Action = {}
private var _onStart: Action?
private var _onSuccess: Action?
import Fluent
private struct _Migration<T>: Migration {
var preparation: (Database) -> EventLoopFuture<Void>
var revertion: (Database) -> EventLoopFuture<Void>
func prepare(on database: Database) -> EventLoopFuture<Void> { preparation(database) }
func revert(on database: Database) -> EventLoopFuture<Void> { revertion(database) }
}
public protocol MigrationProvider {
@maximkrouk
maximkrouk / REPL.swift
Last active May 30, 2020 14:32
Class for stdout redirection
import Foundation
import Combine
class REPL {
private static let shared = REPL()
public static var publisher: AnyPublisher<String, Never> {
shared.publisher.eraseToAnyPublisher()
}