prairie-0.0.1.0: test/Spec.hs
{-# language TypeApplications, StandaloneDeriving, ConstraintKinds, TemplateHaskell, DataKinds, OverloadedStrings, FlexibleInstances, MultiParamTypeClasses, UndecidableInstances, TypeFamilies, GADTs #-}
module Main where
import Prairie
import Data.Aeson
import Control.Monad
data User = User { name :: String, age :: Int }
deriving Eq
mkRecord ''User
deriving instance Eq (Field User a)
example = User "Alice" 30
assert :: String -> Bool -> IO ()
assert message success = unless success (error message)
main :: IO ()
main = do
assert "getField" $ getRecordField UserName example == "Alice"
assert "setField" $ setRecordField UserAge 32 example == User "Alice" 32
assert "label" $ recordFieldLabel UserAge == "age"
assert "label" $ recordFieldLabel UserName == "name"
assert "update json" $
encode (diffRecord example (setRecordField UserName "Bob" example))
==
"[{\"field\":\"name\",\"value\":\"Bob\"}]"
assert "decode update" $
decode "[{\"field\":\"name\",\"value\":\"Bob\"}]"
==
Just [SetField UserName "Bob"]