This commit is contained in:
Михаил Капелько
2023-12-31 19:58:55 +03:00
parent 576f67e882
commit b67ed0c593
6 changed files with 70 additions and 84 deletions

View File

@@ -0,0 +1,29 @@
import Combine
public extension Bus {
final class Sync<Src, Dst> {
let v = PassthroughSubject<Src, Never>()
var subscriptions = [AnyCancellable]()
public init(
_ handler: @escaping ((Src) -> Dst?),
_ src: String,
_ dst: String
) {
// Вход.
Bus.receiveSync(
[src],
{ [weak self] _, v in self?.v.send(v) },
&subscriptions
)
// Выход.
Bus.sendSync(
dst,
v
.compactMap { (v: Src) in handler(v) }
.eraseToAnyPublisher(),
&subscriptions
)
}
}
}