
ru.hnau.jutils.producer.WrapProducer.kt Maven / Gradle / Ivy
The newest version!
package ru.hnau.jutils.producer
import ru.hnau.jutils.producer.detacher.ProducerDetachers
abstract class WrapProducer(
private val source: Producer
) : StateProducer() {
interface Proxy {
fun call(value: T)
}
companion object {
fun create(
source: Producer,
onWrappedProducerCall: Proxy.(I) -> Unit
): Producer = object : WrapProducer(source) {
override fun onWrappedProducerCall(data: I, proxy: Proxy) =
onWrappedProducerCall.invoke(proxy, data)
}
}
private val detachers = ProducerDetachers()
private val proxy = object : Proxy {
override fun call(value: O) = update(value)
}
abstract fun onWrappedProducerCall(data: I, proxy: Proxy)
override fun onFirstAttached() {
super.onFirstAttached()
source.attach(detachers) { value ->
onWrappedProducerCall(value, proxy)
}
}
override fun onLastDetached() {
detachers.detachAllAndClear()
super.onLastDetached()
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy