packages feed

slack-web-1.6.1.0: tests/TestImport/Aeson.hs

module TestImport.Aeson (aesonRoundtrips) where

import Data.Aeson.Types qualified as A
import TestImport

aesonRoundtrips :: forall a. (FromJSON a, ToJSON a, Eq a) => a -> Bool
aesonRoundtrips a =
  let encoded = toJSON a
      parsed = A.parse (parseJSON @a) encoded
      roundTwo = fmap (toJSON @a) parsed
   in -- The encoding is the same
      A.Success encoded == roundTwo
        -- AND the object itself is the same
        && A.Success a == parsed