From fdc75cc43d908733f777fb571a14e8edbd6c2cc0 Mon Sep 17 00:00:00 2001 From: Alice BRENON <alice.brenon@ens-lyon.fr> Date: Fri, 22 Dec 2023 14:25:03 +0100 Subject: [PATCH] Add FromJSON instances for ArticleRecord and @ types --- lib/GEODE/Metadata/ArticleRecord.hs | 4 +++- lib/GEODE/Metadata/Types.hs | 7 +++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/GEODE/Metadata/ArticleRecord.hs b/lib/GEODE/Metadata/ArticleRecord.hs index fd589ff..23eac89 100644 --- a/lib/GEODE/Metadata/ArticleRecord.hs +++ b/lib/GEODE/Metadata/ArticleRecord.hs @@ -5,7 +5,7 @@ module GEODE.Metadata.ArticleRecord , relativePath , uid ) where -import Data.Aeson ((.=), ToJSON(..)) +import Data.Aeson ((.=), FromJSON(..), ToJSON(..)) import Data.Aeson.KeyMap as KeyMap (fromList) import Data.Csv (FromField(..), FromNamedRecord(..), ToNamedRecord(..), ToField(..)) import GEODE.Metadata.Record (Record(..)) @@ -34,6 +34,8 @@ instance ToJSONObject ArticleRecord where <> "volume" .= volume <> "article" .= article +instance FromJSON ArticleRecord + instance Record ArticleRecord where uid (ArticleRecord {work, volume, article}) = printf "%s_%d_%d" (show $ work) volume article diff --git a/lib/GEODE/Metadata/Types.hs b/lib/GEODE/Metadata/Types.hs index 0a038b2..caeabec 100644 --- a/lib/GEODE/Metadata/Types.hs +++ b/lib/GEODE/Metadata/Types.hs @@ -4,7 +4,7 @@ module GEODE.Metadata.Types , ToJSONObject(..) , type (@)(..) ) where -import Data.Aeson (Object, Series, ToJSON(..), Value(..), pairs) +import Data.Aeson (FromJSON(..), Object, Series, ToJSON(..), Value(..), pairs) import Data.Aeson.KeyMap as Object (union) import Data.Csv (FromNamedRecord(..), ToNamedRecord(..)) import Data.HashMap.Strict as Hash (union) @@ -39,6 +39,5 @@ instance {-# OVERLAPPABLE #-} ToJSONObject a => ToJSON a where toJSON = Object . toJSONObject toEncoding = pairs . toJSONPairs -instance (ToJSONObject a, ToJSONObject b) => ToJSONObject (a @ b) where - toJSONObject (a :@: b) = toJSONObject a `Object.union` toJSONObject b - toJSONPairs (a :@: b) = toJSONPairs a <> toJSONPairs b +instance {-# OVERLAPPABLE #-} (FromJSON a, FromJSON b) => FromJSON (a @ b) where + parseJSON o = (:@:) <$> parseJSON o <*> parseJSON o -- GitLab