From 55c8003e22deba0fc55013e187c5fd0f7d93e5ce Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 1 Jul 2013 16:28:22 -0700 Subject: Shared: Export getField. --- src/Text/Pandoc/Shared.hs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/Text') diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index 9ee6b0f15..c9b5842b3 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -64,6 +64,7 @@ module Text.Pandoc.Shared ( addMetaField, makeMeta, metaToJSON, + getField, setField, defField, -- * TagSoup HTML handling @@ -113,7 +114,7 @@ import Network.Browser (browse, setAllowRedirects, setOutHandler, request) import qualified Data.Traversable as Traversable import qualified Data.HashMap.Strict as H import qualified Data.Text as T -import Data.Aeson (ToJSON (..), Value(Object), Result(..), fromJSON) +import Data.Aeson (FromJSON(..), fromJSON, ToJSON (..), Value(Object), Result(..)) #ifdef EMBED_DATA_FILES import Text.Pandoc.Data (dataFiles) @@ -554,6 +555,18 @@ metaValueToJSON _ _ (MetaString s) = return $ toJSON s metaValueToJSON blockWriter _ (MetaBlocks bs) = liftM toJSON $ blockWriter bs metaValueToJSON _ inlineWriter (MetaInlines bs) = liftM toJSON $ inlineWriter bs +-- | Retrieve a field value from a JSON object. +getField :: FromJSON a + => String + -> Value + -> Maybe a +getField field (Object hashmap) = do + result <- H.lookup (T.pack field) hashmap + case fromJSON result of + Success x -> return x + _ -> fail "Could not convert from JSON" +getField field _ = fail "Not a JSON object" + setField :: ToJSON a => String -> a -- cgit v1.2.3