Testing out JmonkeyEngine to make a game in Scala with Akka Actors within a pure FP layer
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.

40 lines
1.3 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. package wow.doge.mygame
  2. import java.util.concurrent.TimeoutException
  3. import cats.data.Reader
  4. import monix.bio.IO
  5. import wow.doge.mygame.utils.wrappers.jme.AssetManager
  6. import wow.doge.mygame.utils.wrappers.jme.CollisionShapeFactory
  7. import wow.doge.mygame.utils.wrappers.jme.NodeWrapper2
  8. sealed trait AppError
  9. object AppError {
  10. final case class TimeoutError(reason: String) extends AppError
  11. object TimeoutError {
  12. def reader =
  13. Reader[Throwable, TimeoutError] {
  14. case ex: TimeoutException => TimeoutError(ex.getMessage)
  15. }
  16. def from: PartialFunction[Throwable, IO[TimeoutError, Nothing]] = {
  17. case ex: TimeoutException => IO.raiseError(TimeoutError(ex.getMessage))
  18. }
  19. }
  20. final case class DummyError(reason: String) extends AppError
  21. object DummyError {
  22. def reader =
  23. Reader[Throwable, DummyError] {
  24. case ex: NullPointerException => DummyError(ex.getMessage)
  25. }
  26. }
  27. final case class AssetManagerError(error: AssetManager.Error) extends AppError
  28. final case class AppNodeError(error: NodeWrapper2.Error) extends AppError
  29. final case class CollisionShapeCreationFailed(
  30. err: CollisionShapeFactory.Error
  31. ) extends AppError
  32. def fromThrowable: PartialFunction[Throwable, IO[AppError, Nothing]] = {
  33. case ex: TimeoutException => IO.raiseError(TimeoutError(ex.getMessage))
  34. }
  35. }