packages feed

json-schema-0.7.1.0: examples/Example.hs

{-# LANGUAGE
    DeriveGeneric
  , OverloadedStrings
  #-}
module Example where

import Control.Applicative
import Control.Monad
import Data.Aeson hiding (Object)
import Data.Text (Text)
import GHC.Generics
import Generics.Generic.Aeson
import qualified Data.Aeson as A

import Data.JSON.Schema

-- Manually defined instances

data User = User { name :: Text, age :: Int }

instance ToJSON User where
  toJSON u = object [ "name" .= name u
                    , "age"  .= age u
                    ]

instance FromJSON User where
  parseJSON (A.Object u) = User <$> u .: "name" <*> u .: "age"
  parseJSON _            = mzero

instance JSONSchema User where
  schema pu = Object [ Field { key = "name", required = True, content = schema $ fmap name pu }
                     , Field { key = "age" , required = True, content = schema $ fmap age  pu }
                     ]

-- Using generic-aeson

data User2 = User2 { name2 :: Text, age2 :: Text }
  deriving Generic

instance ToJSON User2 where
  toJSON = gtoJson

instance FromJSON User2 where
  parseJSON = gparseJson

instance JSONSchema User2 where
  schema = gSchema