{-# LANGUAGE DerivingVia, DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
module Main where
import Data.Aeson
import Deriving.Aeson
import Deriving.Aeson.Stock
import qualified Data.ByteString.Lazy.Char8 as BL
data User = User
{ userId :: Int
, userName :: String
, userAPIToken :: Maybe String
} deriving Generic
deriving (FromJSON, ToJSON)
via CustomJSON '[OmitNothingFields, FieldLabelModifier (StripPrefix "user", CamelToSnake)] User
data Foo = Foo { fooFoo :: Int, fooBar :: Int }
deriving Generic
deriving (FromJSON, ToJSON)
via Prefixed "foo" Foo
testData :: [User]
testData = [User 42 "Alice" Nothing, User 43 "Bob" (Just "xyz")]
main = do
BL.putStrLn $ encode testData
BL.putStrLn $ encode $ Foo 0 1