{-# LANGUAGE DeriveDataTypeable #-}
module Neovim.Exceptions
( NeovimException(..)
, exceptionToDoc
) where
import Control.Exception (Exception)
import Data.MessagePack (Object (..))
import Data.String (IsString (..))
import Data.Text.Prettyprint.Doc (Doc, (<+>), viaShow)
import Data.Text.Prettyprint.Doc.Render.Terminal (AnsiStyle)
import Data.Typeable (Typeable)
data NeovimException
= ErrorMessage (Doc AnsiStyle)
| ErrorResult Object
deriving (Typeable, Int -> NeovimException -> ShowS
[NeovimException] -> ShowS
NeovimException -> String
(Int -> NeovimException -> ShowS)
-> (NeovimException -> String)
-> ([NeovimException] -> ShowS)
-> Show NeovimException
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NeovimException] -> ShowS
$cshowList :: [NeovimException] -> ShowS
show :: NeovimException -> String
$cshow :: NeovimException -> String
showsPrec :: Int -> NeovimException -> ShowS
$cshowsPrec :: Int -> NeovimException -> ShowS
Show)
instance Exception NeovimException
instance IsString NeovimException where
fromString :: String -> NeovimException
fromString = Doc AnsiStyle -> NeovimException
ErrorMessage (Doc AnsiStyle -> NeovimException)
-> (String -> Doc AnsiStyle) -> String -> NeovimException
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc AnsiStyle
forall a. IsString a => String -> a
fromString
exceptionToDoc :: NeovimException -> Doc AnsiStyle
exceptionToDoc :: NeovimException -> Doc AnsiStyle
exceptionToDoc = \case
ErrorMessage Doc AnsiStyle
e ->
Doc AnsiStyle
"Error message:" Doc AnsiStyle -> Doc AnsiStyle -> Doc AnsiStyle
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc AnsiStyle
e
ErrorResult Object
o ->
Doc AnsiStyle
"Result representing an error:" Doc AnsiStyle -> Doc AnsiStyle -> Doc AnsiStyle
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Object -> Doc AnsiStyle
forall a ann. Show a => a -> Doc ann
viaShow Object
o