module Text.GLTF.Loader.Errors
  ( Errors(..),
    _ReadError,
    _ImpossibleError
  ) where

import Lens.Micro (Traversal'())
import RIO

data Errors
  = ReadError Text
  | ImpossibleError
  deriving (Int -> Errors -> ShowS
[Errors] -> ShowS
Errors -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Errors] -> ShowS
$cshowList :: [Errors] -> ShowS
show :: Errors -> String
$cshow :: Errors -> String
showsPrec :: Int -> Errors -> ShowS
$cshowsPrec :: Int -> Errors -> ShowS
Show, Errors -> Errors -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Errors -> Errors -> Bool
$c/= :: Errors -> Errors -> Bool
== :: Errors -> Errors -> Bool
$c== :: Errors -> Errors -> Bool
Eq, Typeable)

instance Display Errors where
  textDisplay :: Errors -> Text
textDisplay = Errors -> Text
displayErrorText

_ReadError :: Traversal' Errors Text
_ReadError :: Traversal' Errors Text
_ReadError Text -> f Text
f (ReadError Text
text) = Text -> Errors
ReadError forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> f Text
f Text
text
_ReadError Text -> f Text
_ Errors
err = forall (f :: * -> *) a. Applicative f => a -> f a
pure Errors
err

_ImpossibleError :: Traversal' Errors ()
_ImpossibleError :: Traversal' Errors ()
_ImpossibleError () -> f ()
f Errors
ImpossibleError = () -> f ()
f () forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Errors
ImpossibleError
_ImpossibleError () -> f ()
_ Errors
err = forall (f :: * -> *) a. Applicative f => a -> f a
pure Errors
err

displayErrorText :: Errors -> Text
displayErrorText :: Errors -> Text
displayErrorText (ReadError Text
txt) = Text
txt
displayErrorText Errors
ImpossibleError = Text
"An impossible error has occurred!"