packages feed

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"