packages feed

atlassian-connect-descriptor-0.1.0.0: tests/ValueExtractors.hs

module ValueExtractors where

import           Data.Aeson
import qualified Data.HashMap.Strict as M
import qualified Data.Scientific     as S
import qualified Data.Text           as T
import qualified Data.Vector         as V

get :: T.Text -> Value -> IO Value
get key (Object o) = maybe notFound return $ M.lookup key o
    where
        notFound = fail $ "Could not find a value in object with key: " ++ T.unpack key
get key _ = fail $ "The value was not an object when looking for: " ++ T.unpack key

getArray :: Value -> IO [Value]
getArray (Array v) = return . V.toList $ v
getArray v = fail $ "Value is not an array. It is a: " ++ valueAsString v

getString :: Value -> IO T.Text
getString (String s) = return s
getString v = fail $ "Value is not a string value. It is a: " ++ valueAsString v

getBool :: Value -> IO Bool
getBool (Bool b) = return b
getBool v = fail $ "Value is not a boolean. It is a: " ++ valueAsString v

isObject :: Value -> Bool
isObject (Object _) = True
isObject _ = False

isArray :: Value -> Bool
isArray (Array _) = True
isArray _ = False

getNumber :: Value -> IO S.Scientific
getNumber (Number n) = return n
getNumber v = fail $ "Value is not a number. It is a: " ++ valueAsString v

valueAsString :: Value -> String
valueAsString (Object _) = "Object"
valueAsString (Array _) = "Array"
valueAsString (Bool _) = "Bool"
valueAsString (String _) = "String"
valueAsString (Number _) = "Number"
valueAsString Null = "Null"