module Development.Shake.Plus.Extended.Conduit (
RemoteJSONLookup(..)
, addRemoteJSONOracleCache
) where
import Data.Aeson
import Data.Binary.Instances.Aeson ()
import Development.Shake.Plus
import Network.HTTP.Simple
import RIO
import qualified RIO.Text as T
newtype RemoteJSONLookup = RemoteJSONLookup Text
deriving (Show, Typeable, Eq)
type instance RuleResult RemoteJSONLookup = Value
deriving instance Hashable RemoteJSONLookup
deriving instance Binary RemoteJSONLookup
deriving instance NFData RemoteJSONLookup
addRemoteJSONOracleCache :: (MonadReader r m, MonadRules m) => m (RemoteJSONLookup -> RAction r Value)
addRemoteJSONOracleCache = addOracleCache $ \(RemoteJSONLookup x) -> do
initReq <- parseRequest $ T.unpack x
(y :: Response Value) <- httpJSON initReq
return $ getResponseBody y