shakebook-0.2.0.0: src/Shakebook/Aeson.hs
{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
module Shakebook.Aeson where
import Control.Lens
import Data.Aeson as A
import Data.Aeson.Lens
import RIO hiding (view)
import qualified RIO.HashMap as HML
import qualified RIO.Vector as V
-- | Union two JSON values together.
withJSON :: (ToJSON a) => a -> Value -> Value
withJSON x (Object obj) = Object $ HML.union obj y
where Object y = toJSON x
withJSON _ _ = error "Can ony add a new TOJSON object to objects"
-- | Add a String field to a JSON value.
withStringField :: Text -> Text -> Value -> Value
withStringField f v = _Object . at f ?~ String v
-- | Add an Array field to a JSON value.
withArrayField :: Text -> [Value] -> Value -> Value
withArrayField f v = _Object . at f ?~ Array (V.fromList v)
-- | Add an Object field to a JSON value.
withObjectField :: Text -> Value -> Value -> Value
withObjectField f v = _Object . at f ?~ v
-- | Maybe add an Object field to a JSON value.
withObjectFieldMaybe :: Text -> Maybe Value -> Value -> Value
withObjectFieldMaybe f v = _Object . at f .~ v