hq-json-0.1.1: src/HQ/Transformation/Error.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
module HQ.Transformation.Error where
import Relude hiding (Const, many, not, or, some, subtract, toStrict)
-- | A transformation failure: wrong value type, non-boolean @or@
-- branch, or violated runner contract (string keys, boolean gates).
data TransformationError
= ExpectedNumber
| ExpectedString
| ExpectedArray
| ExpectedObject
| ExpectedBoolean
| -- | A non-boolean branch of @or@.
OrBranchNotBoolean
| -- | A non-boolean left branch of @and@.
AndBranchNotBoolean
| -- | A non-boolean branch of @xor@.
XorBranchNotBoolean
| -- | A key rewrite yielding a non-string.
KeyNotString
| -- | A @filter@ predicate yielding a non-boolean.
FilterNotBoolean
renderTransformationError :: TransformationError -> Text
renderTransformationError err = case err of
ExpectedNumber -> "expected a number"
ExpectedString -> "expected a string"
ExpectedArray -> "expected an array"
ExpectedObject -> "expected an object"
ExpectedBoolean -> "expected a boolean"
OrBranchNotBoolean -> "expected a boolean result from the left side of or"
AndBranchNotBoolean -> "expected a boolean result from the left side of and"
XorBranchNotBoolean -> "expected a boolean result from each side of xor"
KeyNotString -> "key transformation must yield a string"
FilterNotBoolean -> "filter transformation must produce a boolean"