etc-0.4.1.0: src/System/Etc/Internal/Spec/JSON/TH.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
module System.Etc.Internal.Spec.JSON.TH where
import RIO
import Data.Proxy (Proxy)
import Language.Haskell.TH (ExpQ, runIO)
import Language.Haskell.TH.Syntax (Lift)
import qualified Data.Aeson as JSON
import System.Etc.Internal.Spec.JSON (readConfigSpec)
import System.Etc.Internal.Spec.Types (ConfigSpec)
readConfigSpecTH_ :: (Lift k) => Proxy k -> (Text -> IO (ConfigSpec k)) -> Text -> ExpQ
readConfigSpecTH_ _ readSpec filepath = do
configSpec <- runIO $ readSpec filepath
[| configSpec |]
readConfigSpecTH :: (Lift k, JSON.FromJSON k) => Proxy k -> Text -> ExpQ
readConfigSpecTH = flip readConfigSpecTH_ readConfigSpec