packages feed

gotyno-hs-1.1.0: src/Basic.hs

module Basic where

import Data.Aeson (FromJSON (..), ToJSON (..), (.:), (.:?), (.=))
import qualified Data.Aeson as JSON
import GHC.Generics (Generic)
import qualified Gotyno.Helpers as Helpers
import Prelude

data Recruiter = Recruiter
  { recruiterType :: !String,
    recruiterName :: !String,
    recruiterEmails :: ![Maybe String],
    recruiterRecruiter :: !(Maybe Recruiter),
    recruiterCreated :: !Integer
  }
  deriving (Eq, Show, Generic)

instance FromJSON Recruiter where
  parseJSON = JSON.withObject "Recruiter" $ \o -> do
    recruiterType <- o .: "type" >>= Helpers.checkEqualTo "Recruiter"
    recruiterName <- o .: "Name"
    recruiterEmails <- o .: "emails"
    recruiterRecruiter <- o .:? "recruiter"
    Helpers.StringEncodedInteger recruiterCreated <- o .: "created"
    pure $
      Recruiter
        { recruiterType,
          recruiterName,
          recruiterEmails,
          recruiterRecruiter,
          recruiterCreated
        }

instance ToJSON Recruiter where
  toJSON value =
    JSON.object
      [ "type" .= Helpers.LiteralString "Recruiter",
        "name" .= recruiterName value,
        "emails" .= recruiterEmails value,
        "recruiter" .= recruiterRecruiter value,
        "created" .= Helpers.StringEncodedInteger (recruiterCreated value)
      ]

-- struct Recruiter {
--     type: "Recruiter"
--     Name: String
--     emails: [3]?String
--     recruiter: ?*Recruiter
--     created: U64
-- }