packages feed

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 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+