import androidx.lifecycle.LiveData
import androidx.lifecycle.MediatorLiveData
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

fun <T> LiveData<T>.debounce(duration: Long = 1000L, coroutineScope: CoroutineScope) = MediatorLiveData<T>().also { mld ->

  val source = this
  var job: Job? = null

  mld.addSource(source) {
    job?.cancel()
    job = coroutineScope.launch {
      delay(duration)
      mld.value = source.value
    }
  }
}