app/util/Memoize.scala (12 lines of code) (raw):

package util import com.google.common.base.Suppliers.memoizeWithExpiration import com.google.common.base.Supplier import java.time.Duration import java.util.concurrent.TimeUnit object Memoize { def apply[T](refresh: => T, duration: Duration): Supplier[T] = memoizeWithExpiration(makeSupplier(refresh), duration.toMillis, TimeUnit.MILLISECONDS) private def makeSupplier[T](fn: => T): Supplier[T] = new Supplier[T] { override def get(): T = fn } }