in storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/reporting/Reporter.scala [24:40]
def sideEffect[T, U](
params: U, f: Future[T],
sideEffect: (U, Future[T]) => Future[Unit]
): Future[T] =
Future.join(f, sideEffect(params, f)).map(_._1)
def sideEffect[T, K, U](
params: U, f: Map[K, Future[T]],
sideEffect: (U, Map[K, Future[T]]) => Map[K, Future[Unit]]
): Map[K, Future[T]] = {
val effected = sideEffect(params, f)
f.map{case (k, v) =>
val unitF = effected.getOrElse(k,
sys.error("Reporter for multi side effect didn't return a future for key" + k.toString))
(k, Future.join(v, unitF).map(_._1))
}
}