packages feed

hasklepias-0.8.3: src/EventData/Context/Domain/Demographics.hs

{-|
Module      : Event Data Model facts 
Description : Defines the Context type and its component types, constructors, 
              and class instances
Copyright   : (c) NoviSci, Inc 2020
License     : BSD3
Maintainer  : bsaul@novisci.com
-}

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}

module EventData.Context.Domain.Demographics(
      DemographicsFacts(..)
    , DemographicsInfo(..)
    , DemographicsField(..)
    , demo
    , field 
    , info
) where

import Prelude                  ( drop, Show, Eq, Maybe )
import Control.Lens             ( makeLenses )
import GHC.Generics             ( Generic )
import Data.Text                ( Text )
import Data.Aeson               ( FromJSON(..)
                                , genericParseJSON
                                , defaultOptions
                                , fieldLabelModifier )  

newtype DemographicsFacts = 
    DemographicsFacts { _demo :: DemographicsInfo
                      } deriving( Eq, Show, Generic )

data DemographicsInfo = 
    DemographicsInfo { _field :: DemographicsField
                     , _info :: Maybe Text
                     } deriving ( Eq, Show, Generic )

data DemographicsField =
      BirthYear
    | BirthDate
    | Race
    | RaceCodes
    | Gender
    | Zipcode
    | County
    | CountyFIPS
    | State
    | Ethnicity
    | Region
    | UrbanRural
    | GeoPctAmIndian
    | GeoPctAsian
    | GeoPctBlack
    | GeoPctHispanic
    | GeoPctMutli
    | GeoPctOther
    | GeoPctWhite
    | GeoType
    | GeoAdiStateRank
    | GeoAdiNatRank
    deriving ( Eq, Show, Generic )

makeLenses ''DemographicsFacts
makeLenses ''DemographicsInfo

instance FromJSON DemographicsFacts where
  parseJSON = genericParseJSON defaultOptions{fieldLabelModifier = drop 1}
instance FromJSON DemographicsInfo where
  parseJSON = genericParseJSON defaultOptions{fieldLabelModifier = drop 1}
instance FromJSON DemographicsField where