48 lines
1.7 KiB
Haskell
48 lines
1.7 KiB
Haskell
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
|
|
module Data.CryptoID.Instances
|
|
(
|
|
) where
|
|
|
|
import qualified Data.CryptoID as CID
|
|
|
|
import Text.Blaze (ToMarkup(..))
|
|
|
|
import ClassyPrelude
|
|
|
|
import Data.CaseInsensitive (CI)
|
|
import qualified Data.CaseInsensitive as CI
|
|
|
|
import Web.PathPieces
|
|
import Data.Aeson (ToJSON(..), ToJSONKey(..), ToJSONKeyFunction(..))
|
|
|
|
import qualified Data.Csv as Csv
|
|
|
|
|
|
instance ToMarkup s => ToMarkup (CID.CryptoID c s) where
|
|
toMarkup = toMarkup . CID.ciphertext
|
|
|
|
instance {-# OVERLAPS #-} ToMarkup s => ToMarkup (CID.CryptoID c (CI s)) where
|
|
toMarkup = toMarkup . CI.foldedCase . CID.ciphertext
|
|
|
|
instance {-# OVERLAPS #-} ToJSON s => ToJSON (CID.CryptoID c (CI s)) where
|
|
toJSON = toJSON . CI.foldedCase . CID.ciphertext
|
|
|
|
instance {-# OVERLAPS #-} (ToJSON s, ToJSONKey s) => ToJSONKey (CID.CryptoID c (CI s)) where
|
|
toJSONKey = case toJSONKey of
|
|
ToJSONKeyText toT toE -> ToJSONKeyText (toT . CI.foldedCase . CID.ciphertext) (toE . CI.foldedCase . CID.ciphertext)
|
|
ToJSONKeyValue toV toE -> ToJSONKeyValue (toV . CI.foldedCase . CID.ciphertext) (toE . CI.foldedCase . CID.ciphertext)
|
|
|
|
instance {-# OVERLAPS #-} (PathPiece s, CI.FoldCase s) => PathPiece (CID.CryptoID c (CI s)) where
|
|
toPathPiece = toPathPiece . CI.foldedCase . CID.ciphertext
|
|
fromPathPiece = fmap (CID.CryptoID . CI.mk) . fromPathPiece
|
|
|
|
instance Csv.FromField s => Csv.FromField (CID.CryptoID c s) where
|
|
parseField = fmap CID.CryptoID . Csv.parseField
|
|
|
|
instance Csv.ToField s => Csv.ToField (CID.CryptoID c s) where
|
|
toField = Csv.toField . CID.ciphertext
|
|
|
|
instance {-# OVERLAPS #-} Csv.ToField s => Csv.ToField (CID.CryptoID c (CI s)) where
|
|
toField = Csv.toField . CI.foldedCase . CID.ciphertext
|