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.
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|