Swiftgram/submodules/SSignalKit/SwiftSignalKit/Signal_Materialize.swift
Peter 971273e8f8 Add 'submodules/SSignalKit/' from commit '359b2ee7c9f20f99f221f78e307369ef5ad0ece2'
git-subtree-dir: submodules/SSignalKit
git-subtree-mainline: 4459dc5b47e7db4ea1adb3a43a4324d1c2f9feab
git-subtree-split: 359b2ee7c9f20f99f221f78e307369ef5ad0ece2
2019-06-11 18:57:57 +01:00

41 lines
1.1 KiB
Swift

import Foundation
public enum SignalEvent<T, E> {
case Next(T)
case Error(E)
case Completion
}
public func dematerialize<T, E>(signal: Signal<T, E>) -> Signal<SignalEvent<T, E>, NoError> {
return Signal { subscriber in
return signal.start(next: { next in
subscriber.putNext(.Next(next))
}, error: { error in
subscriber.putNext(.Error(error))
subscriber.putCompletion()
}, completed: {
subscriber.putNext(.Completion)
subscriber.putCompletion()
})
}
}
public func materialize<T, E>(signal: Signal<SignalEvent<T, E>, NoError>) -> Signal<T, E> {
return Signal { subscriber in
return signal.start(next: { next in
switch next {
case let .Next(next):
subscriber.putNext(next)
case let .Error(error):
subscriber.putError(error)
case .Completion:
subscriber.putCompletion()
}
}, error: { _ in
subscriber.putCompletion()
}, completed: {
subscriber.putCompletion()
})
}
}