shake-plus-extended 0.3.0.0 → 0.4.0.0
raw patch · 3 files changed
+47/−2 lines, 3 filesdep +aesondep +binary-instancesdep +http-conduitPVP ok
version bump matches the API change (PVP)
Dependencies added: aeson, binary-instances, http-conduit
API changes (from Hackage documentation)
+ Development.Shake.Plus.Extended.Conduit: RemoteJSONLookup :: Text -> RemoteJSONLookup
+ Development.Shake.Plus.Extended.Conduit: addRemoteJSONOracleCache :: (MonadReader r m, MonadRules m) => m (RemoteJSONLookup -> RAction r Value)
+ Development.Shake.Plus.Extended.Conduit: instance Control.DeepSeq.NFData Development.Shake.Plus.Extended.Conduit.RemoteJSONLookup
+ Development.Shake.Plus.Extended.Conduit: instance Data.Binary.Class.Binary Development.Shake.Plus.Extended.Conduit.RemoteJSONLookup
+ Development.Shake.Plus.Extended.Conduit: instance Data.Hashable.Class.Hashable Development.Shake.Plus.Extended.Conduit.RemoteJSONLookup
+ Development.Shake.Plus.Extended.Conduit: instance GHC.Classes.Eq Development.Shake.Plus.Extended.Conduit.RemoteJSONLookup
+ Development.Shake.Plus.Extended.Conduit: instance GHC.Show.Show Development.Shake.Plus.Extended.Conduit.RemoteJSONLookup
+ Development.Shake.Plus.Extended.Conduit: newtype RemoteJSONLookup
Files
- ChangeLog.md +4/−0
- shake-plus-extended.cabal +6/−2
- src/Development/Shake/Plus/Extended/Conduit.hs +37/−0
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for shake-plus-extended +## v0.4.0.0++* Add `Development.Shake.Plus.Extended.Conduit" with conduit oracle.+ ## v0.3.0.0 * Add `SimpleSPlusEnv` with a `LogFunc` and a local `Path Rel Dir`.
shake-plus-extended.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: shake-plus-extended-version: 0.3.0.0+version: 0.4.0.0 synopsis: Experimental extensions to shake-plus description: Experimental extensions to shake-plus - `within`-style file rules, HashMap and IxSet batch loaders. category: development, shake@@ -26,6 +26,7 @@ library exposed-modules: Development.Shake.Plus.Extended+ Development.Shake.Plus.Extended.Conduit Development.Shake.Plus.Extended.FileRules Development.Shake.Plus.Extended.Loaders Development.Shake.Plus.Extended.Simple@@ -35,9 +36,12 @@ src default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TupleSections TypeFamilies TypeSynonymInstances ViewPatterns build-depends:- base >=4.7 && <5+ aeson+ , base >=4.7 && <5+ , binary-instances , comonad , extra+ , http-conduit , ixset-typed , ixset-typed-binary-instance , ixset-typed-hashable-instance
+ src/Development/Shake/Plus/Extended/Conduit.hs view
@@ -0,0 +1,37 @@+{- |+ Module : Shakebook.Conduit+ License : MIT+ Stability : experimental++Utilities for using conduit to store remote caches.+-}++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++-- | Remote json lookup for an oracle, this should contain a URL as Text.+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++-- | Adds an oracle cache for looking up json from a remote server.+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+