You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

49 lines
1.2 KiB

package com.xsn.explorer.util
import com.alexitc.playsonify.core.{FutureApplicationResult, FutureOr}
import org.scalactic.{Bad, Good}
import scala.concurrent.{ExecutionContext, Future}
object Extensions {
private val SatoshiScale = 100000000L
implicit class BigDecimalExt(val inner: BigDecimal) extends AnyVal {
def fromSatoshis: BigDecimal = {
inner / SatoshiScale
}
}
implicit class FutureApplicationResultExt[+A](val inner: List[FutureApplicationResult[A]]) extends AnyVal {
def toFutureOr(implicit ec: ExecutionContext): FutureOr[List[A]] = {
val futureList = Future.sequence(inner)
val future = futureList.map { resultList =>
val errorsMaybe = resultList
.flatMap(_.swap.toOption)
.reduceLeftOption(_ ++ _)
.map(_.distinct)
errorsMaybe
.map(Bad(_))
.getOrElse {
val valueList = resultList.flatMap(_.toOption)
Good(valueList)
}
}
new FutureOr(future)
}
}
implicit class ListOptionExt[+A](val inner: List[Option[A]]) extends AnyVal {
def everything: Option[List[A]] = {
if (inner.forall(_.isDefined)) {
Some(inner.flatten)
} else {
None
}
}
}
}