Skip to content
Snippets Groups Projects
Commit b7650a2a authored by Alice Brenon's avatar Alice Brenon
Browse files

Implement JSON conversion for Work type

parent 4f55630e
No related branches found
No related tags found
No related merge requests found
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}
module GEODE.Metadata.Work
( Work(..) ) where
import Data.Aeson (ToJSON(..))
import Data.Aeson (FromJSON(..), ToJSON(..), withText)
import Data.ByteString.Char8 as ByteString (unpack)
import Data.Csv (FromField(..), ToField(..))
import Data.Char (toLower)
import Data.ByteString.Char8 as ByteString (map)
import Data.Text as Text (unpack)
import GHC.Generics (Generic)
data Work = EDdA | LGE | Wikipedia deriving (Eq, Ord, Read, Show)
data Work = EDdA | LGE | Wikipedia deriving (Eq, Generic, Ord, Show)
tolerantParser :: (Applicative m, Monoid (m Work)) => String -> m Work
tolerantParser = recognize . fmap toLower
where
recognize "edda" = pure EDdA
recognize "lge" = pure LGE
recognize "wikipedia" = pure Wikipedia
recognize _ = mempty
instance FromField Work where
parseField = recognize . ByteString.map toLower
where
recognize "EDdA" = pure EDdA
recognize "LGE" = pure LGE
recognize "Wikipedia" = pure Wikipedia
recognize _ = mempty
parseField = tolerantParser . ByteString.unpack
instance ToField Work where
toField = toField . show
instance ToJSON Work where
toJSON = toJSON . show
instance ToJSON Work
instance FromJSON Work where
parseJSON = withText "Work" $ tolerantParser . Text.unpack
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment