diff --git a/lib/GEODE/Metadata/ArticleRecord.hs b/lib/GEODE/Metadata/ArticleRecord.hs index fd589ff97a4f409337d7da7dfb0a0eaa990fa376..23eac89ce0eb6f3bc1b300d649ef526f7a6e706c 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 0a038b2d243c3ceb95abec4d4ba6f76e11970be1..caeabec1d47337552410060734e24535d30ea310 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