2021-01-15 06:39:43 +00:00
|
|
|
package wow.doge.mygame
|
|
|
|
|
2021-01-16 13:20:32 +00:00
|
|
|
import java.util.concurrent.TimeoutException
|
|
|
|
|
2021-01-20 06:50:20 +00:00
|
|
|
import cats.Show
|
|
|
|
import cats.kernel.Eq
|
2021-01-16 13:20:32 +00:00
|
|
|
import monix.bio.IO
|
|
|
|
import wow.doge.mygame.utils.wrappers.jme.AssetManager
|
|
|
|
import wow.doge.mygame.utils.wrappers.jme.CollisionShapeFactory
|
|
|
|
import wow.doge.mygame.utils.wrappers.jme.NodeWrapper2
|
|
|
|
|
2021-02-27 06:06:32 +00:00
|
|
|
sealed trait AppError extends Product with Serializable
|
2021-01-15 06:39:43 +00:00
|
|
|
object AppError {
|
2021-01-16 13:20:32 +00:00
|
|
|
final case class TimeoutError(reason: String) extends AppError
|
|
|
|
object TimeoutError {
|
|
|
|
def from: PartialFunction[Throwable, IO[TimeoutError, Nothing]] = {
|
|
|
|
case ex: TimeoutException => IO.raiseError(TimeoutError(ex.getMessage))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
final case class AssetManagerError(error: AssetManager.Error) extends AppError
|
|
|
|
final case class AppNodeError(error: NodeWrapper2.Error) extends AppError
|
|
|
|
final case class CollisionShapeCreationFailed(
|
|
|
|
err: CollisionShapeFactory.Error
|
|
|
|
) extends AppError
|
|
|
|
|
|
|
|
def fromThrowable: PartialFunction[Throwable, IO[AppError, Nothing]] = {
|
|
|
|
case ex: TimeoutException => IO.raiseError(TimeoutError(ex.getMessage))
|
|
|
|
|
|
|
|
}
|
2021-01-20 06:50:20 +00:00
|
|
|
|
|
|
|
implicit val show = Show.fromToString[AppError]
|
|
|
|
implicit val eq = Eq.fromUniversalEquals[AppError]
|
2021-01-15 06:39:43 +00:00
|
|
|
}
|