diff --git a/src/Effect.Postgres.Error.Common.purs b/src/Effect.Postgres.Error.Common.purs index e2e4892..bdb8350 100644 --- a/src/Effect.Postgres.Error.Common.purs +++ b/src/Effect.Postgres.Error.Common.purs @@ -2,10 +2,15 @@ module Effect.Postgres.Error.Common where import Prelude +import Data.Array as Array import Data.Array.NonEmpty (NonEmptyArray) +import Data.Foldable (fold) import Data.Generic.Rep (class Generic) +import Data.Maybe (maybe) +import Data.Newtype (wrap) import Data.Postgres.Query (Query) import Data.Show.Generic (genericShow) +import Data.String as String import Effect.Exception as Effect import Foreign (MultipleErrors) @@ -21,7 +26,23 @@ data Error derive instance Generic Error _ instance Show Error where - show = genericShow + show = toString + +toString :: Error -> String +toString = + let + indent n s = fold $ ((fold $ Array.replicate n " ") <> _) <$> String.split (wrap "\n") s + jsError n e = + indent n (Effect.message e) + <> maybe "" (\s -> "\n" <> indent n s) (Effect.stack e) + in + case _ of + Deserializing q es -> "Deserializing " <> show q <> "\n" <> indent 1 (show es) + Serializing es -> "Serializing" <> "\n" <> indent 1 (show es) + Executing q e -> "Executing " <> show q <> "\n" <> jsError 1 e + Connecting e -> "Connecting\n" <> jsError 1 e + Disconnecting e -> "Disconnecting\n" <> jsError 1 e + Other e -> "Other\n" <> jsError 1 e toException' :: Error -> Effect.Error toException' = Effect.error <<< show