in storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/query/QueryStrategy.scala [78:98]
protected def sumValues[K, V: Monoid](ks: Set[K], m: Map[K, V]): V =
Monoid.sum(ks.flatMap(m.get))
/**
* Given a QueryStrategry and a ReadableStore which has been indexed correctly,
* give a ReadableStore on Queries
*/
def query[Q, L, X, V : Semigroup](
qs: QueryStrategy[Q, L, X],
rs: ReadableStore[X, V]
): ReadableStore[Q, V] =
new AbstractReadableStore[Q, V] {
override def get(q: Q): Future[Option[V]] = {
val m = rs.multiGet(qs.query(q))
// Drop the keys and sum it all up
Monoid.sum(m.values)
}
override def multiGet[Q1 <: Q](qset: Set[Q1]): Map[Q1, Future[Option[V]]] =
multiSum(qset, qs.query, rs.multiGet[X])
}