packages feed

hasklepias-0.12.0: 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
-}
{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}

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

import Control.Lens             ( makeLenses )

import Data.Aeson               ( FromJSON(..)
                                , genericParseJSON
                                , defaultOptions
                                , fieldLabelModifier )
import Data.List                ( drop )
import Data.Eq                  ( Eq )
import Data.Maybe               ( Maybe )
import Data.Text                ( Text )
import GHC.Generics             ( Generic )
import GHC.Show                 ( Show )


-- | a demographic fact
newtype DemographicsFacts = 
    DemographicsFacts { _demo :: DemographicsInfo
                      } deriving( Eq, Show, Generic )

-- | information of a demographic fact
data DemographicsInfo = 
    DemographicsInfo { _field :: DemographicsField
                     , _info :: Maybe Text
                     } deriving ( Eq, Show, Generic )

-- | fields available in a demographic fact
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