{-# LANGUAGE DeriveAnyClass        #-}
{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators         #-}

module Sophisticated.Model
  ( jsonAddress
  , jsonUser
  , JSONUser(..)
  , JSONAddress(..)
  ) where

import           Data.Aeson   (FromJSON)
import           Data.Text    (Text)
import           Files        (getJson)
import           GHC.Generics (Generic)

data JSONUser = JSONUser
  { name  :: Text
  , email :: Text
  } deriving (Show, Generic, FromJSON)

data JSONAddress = JSONAddress
  { city        :: Text
  , street      :: Text
  , houseNumber :: Int
  } deriving (Generic, Show, FromJSON)

jsonUser :: IO (Either String JSONUser)
jsonUser = getJson "deprecated/user"

jsonAddress :: IO (Either String JSONAddress)
jsonAddress = getJson "deprecated/address"