module JSONPointer.Aeson.Interpreter where
import BasePrelude
import qualified JSONPointer.Model
import qualified Data.Aeson as Aeson
import qualified Data.HashMap.Strict as HashMap.Strict
import qualified Data.Vector as Vector
value :: JSONPointer.Model.JSONPointer -> Aeson.Value -> Maybe Aeson.Value
value pointer json =
appEndo (JSONPointer.Model.run pointer interpreter) $
Just json
where
interpreter index key =
Endo ((=<<) lookup)
where
lookup =
\case
Aeson.Object x ->
HashMap.Strict.lookup key x
Aeson.Array x ->
(Vector.!?) x =<< index
_ ->
Nothing
nullableValue :: JSONPointer.Model.JSONPointer -> Aeson.Value -> Aeson.Value
nullableValue pointer json =
fromMaybe Aeson.Null $
value pointer json