jsonlogic-0.1.0.0: src/JsonLogic/Operation/Primitive.hs
-- |
-- Module : JsonLogic.Operation.Primitive
-- Description : Internal JsonLogic functions to evaluate to primitive types
-- Copyright : (c) Marien Matser, Gerard van Schie, Jelle Teeuwissen, 2022
-- License : MIT
-- Maintainer : jelleteeuwissen@hotmail.nl
-- Stability : experimental
module JsonLogic.Operation.Primitive (evaluateDouble, evaluateInt, evaluateBool, evaluateArray, evaluateObject, evaluateString) where
import JsonLogic.Json
import JsonLogic.Type
-- Primitive evaluators
evaluateDouble :: Monad m => Function m Double
evaluateDouble evaluator param vars = do
res <- evaluator param vars
return $ parseFloat res
evaluateInt :: Monad m => Function m Int
evaluateInt evaluator param vars = do
res <- evaluateDouble evaluator param vars
if isNaN res
then throw "NotImplemented: NaN to int evaluation"
else return $ floor res
evaluateBool :: Monad m => Function m Bool
evaluateBool evaluator param vars = do
res <- evaluator param vars
return $ isTruthy res
evaluateArray :: Monad m => Function m [Json]
evaluateArray evaluator param vars = do
res <- evaluator param vars
case res of
JsonArray xs -> return xs
j -> throw $ "Invalid parameter type, was expecting array. Got: " ++ show j
evaluateObject :: Monad m => Function m JsonObject
evaluateObject evaluator param vars = do
res <- evaluator param vars
case res of
JsonObject v -> return v
j -> throw $ "Invalid parameter type, was expecting object. Got: " ++ show j
evaluateString :: Monad m => Function m String
evaluateString evaluator param vars = do
res <- evaluator param vars
return $ stringify res