override def multiPut[K1 <:()

in storehaus-redis/src/main/scala/com/twitter/storehaus/redis/RedisSetStore.scala [99:120]


  override def multiPut[K1 <: (Buf, Buf)](
      kv: Map[K1, Option[Unit]]): Map[K1, Future[Unit]] = {
    // we are exploiting redis's built-in support for bulk updates and removals
    // by partioning deletions and updates into 2 maps indexed by the first
    // component of the composite key, the key of the set
    def emptyMap = Map.empty[Buf, List[K1]].withDefaultValue(Nil)
    val (del, persist) = ((emptyMap, emptyMap) /: kv) {
      case ((deleting, storing), (key, Some(_))) =>
        (deleting, storing.updated(key._1, key :: storing(key._1)))
      case ((deleting, storing), (key, None)) =>
        (deleting.updated(key._1, key :: deleting(key._1)), storing)
    }
    del.flatMap {
      case (k, members) =>
        val value = store.delete(k, members.map(_._2))
        members.map(_ -> value)
    } ++ persist.flatMap {
      case (k, members) =>
        val value = store.set(k, members.map(_._2))
        members.map(_ -> value)
    }
  }