packages feed

solr 0.3.3 → 0.4

raw patch · 6 files changed

+132/−56 lines, 6 filesdep +attoparsec-datadep +http-client-tlsdep +manageddep ~http-client

Dependencies added: attoparsec-data, http-client-tls, managed, optparse-applicative-simple

Dependency ranges changed: http-client

Files

+ library/Solr/Args.hs view
@@ -0,0 +1,45 @@+{-|+Command line arguments API.+-}+module Solr.Args+(+  managedResource,+)+where++import Solr.Prelude+import OptparseApplicative.Simple.Parser+import qualified Attoparsec.Data.Explicit as A+import qualified Data.Text.Encoding as B+import qualified Control.Monad.Managed.Safe as C+import qualified Solr.Managed as D+import qualified Solr.Effect.Effect as E+++baseURL :: Maybe Text -> (Text -> Text) -> Parser ByteString+baseURL collectionNameMaybe updateName =+  argument (updateName "base-url") Nothing description def parser+  where+    description =+      Just "Base URL of Solr REST API"+    def =+      case collectionNameMaybe of+        Just collectionName ->+          Just (value, text)+          where+            text =+              "http://127.0.0.1:8983/solr/" <> collectionName+            value =+              B.encodeUtf8 text+        Nothing ->+          Nothing+    parser =+      A.utf8Bytes++{-|+Arguments parser, which produces the managed resource,+which can then be used to execute sessions.+-}+managedResource :: Maybe Text {-^ Possible default collection name-} -> (Text -> Text) {-^ Updater of the argument names-} -> Parser (C.Managed E.Resource)+managedResource collectionNameMaybe updateArgumentName =+  D.resource <$> baseURL collectionNameMaybe updateArgumentName
+ library/Solr/Effect.hs view
@@ -0,0 +1,8 @@+module Solr.Effect+(+  module Solr.Effect.Effect,+)+where++import Solr.Effect.Effect hiding (Effect(Effect), Resource(Resource))+
+ library/Solr/Effect/Effect.hs view
@@ -0,0 +1,43 @@+module Solr.Effect.Effect+where++import Solr.Prelude+import qualified Network.HTTP.Client+import qualified Data.ByteString.Lazy+import qualified Data.ByteString+import qualified Solr.Request+import qualified Solr.HTTPRequestEncoder+import qualified HTTPResponseDecoder+++newtype Effect a =+  Effect (ReaderT Resource (ExceptT Error IO) a)+  deriving (Functor, Applicative, Monad, MonadIO)++data Resource =+  Resource ByteString Network.HTTP.Client.Manager++data Error =+  Error_Decoding !Text |+  Error_Transport !Network.HTTP.Client.HttpException+  deriving (Show)++run :: Effect a -> Resource -> IO (Either Error a)+run (Effect impl) resource =+  runExceptT (runReaderT impl resource)++request :: Solr.Request.Request a b -> a -> Effect b+request (Solr.Request.Request encoderProducer decoder) input =+  Effect $+  ReaderT $+  \(Resource baseURL httpManager) ->+    ExceptT $+    fmap (either (Left . Error_Transport) (either (Left . Error_Decoding) Right)) $+    try $+    Network.HTTP.Client.withResponse (request baseURL) httpManager $+    responseDecoder+  where+    request baseURL =+      Solr.HTTPRequestEncoder.encoder_request (encoderProducer baseURL) input+    responseDecoder =+      HTTPResponseDecoder.run decoder
+ library/Solr/Managed.hs view
@@ -0,0 +1,25 @@+module Solr.Managed+(+  resource,+)+where++import Solr.Prelude+import Control.Monad.Managed.Safe+import qualified Network.HTTP.Client as A+import qualified Network.HTTP.Client.TLS as B+import qualified Solr.Effect.Effect as A+++tlsManager :: Managed A.Manager+tlsManager =+  managed (bracketOnError acquire release)+  where+    acquire =+      A.newManager B.tlsManagerSettings+    release _ =+      return ()++resource :: ByteString {-^ Base URL-} -> Managed A.Resource+resource baseURL =+  A.Resource <$> pure baseURL <*> tlsManager
− library/Solr/Session.hs
@@ -1,50 +0,0 @@-module Solr.Session-(-  Session,-  request,-  -- * Execution-  Error(..),-  run,-)-where--import Solr.Prelude-import qualified Network.HTTP.Client-import qualified Data.ByteString.Lazy-import qualified Data.ByteString-import qualified Solr.Request-import qualified Solr.HTTPRequestEncoder-import qualified HTTPResponseDecoder---newtype Session a =-  Session (ReaderT Env (ExceptT Error IO) a)-  deriving (Functor, Applicative, Monad, MonadIO)--type Env =-  (ByteString, Network.HTTP.Client.Manager)--data Error =-  Error_Decoding !Text |-  Error_Transport !Network.HTTP.Client.HttpException-  deriving (Show)--run :: Session a -> ByteString -> Network.HTTP.Client.Manager -> IO (Either Error a)-run (Session impl) baseURL httpManager =-  runExceptT (runReaderT impl (baseURL, httpManager))--request :: Solr.Request.Request a b -> a -> Session b-request (Solr.Request.Request encoderProducer decoder) input =-  Session $-  ReaderT $-  \(baseURL, httpManager) ->-    ExceptT $-    fmap (either (Left . Error_Transport) (either (Left . Error_Decoding) Right)) $-    try $-    Network.HTTP.Client.withResponse (request baseURL) httpManager $-    responseDecoder-  where-    request baseURL =-      Solr.HTTPRequestEncoder.encoder_request (encoderProducer baseURL) input-    responseDecoder =-      HTTPResponseDecoder.run decoder
solr.cabal view
@@ -1,7 +1,7 @@ name:   solr version:-  0.3.3+  0.4 synopsis:   A minimal Solr client library homepage:@@ -23,14 +23,12 @@ cabal-version:   >=1.10 - source-repository head   type:     git   location:     git://github.com/sannsyn/solr.git - library   hs-source-dirs:     library@@ -43,13 +41,21 @@     Solr.HTTPResponseDecoder     Solr.HTTPRequestEncoder     Solr.Parameters+    Solr.Effect.Effect   exposed-modules:-    Solr.Session+    Solr.Managed+    Solr.Effect     Solr.Request+    Solr.Args   build-depends:+    -- +    managed == 1.*,+    optparse-applicative-simple >= 1 && < 1.1,+    attoparsec-data == 0.1.*,     -- networking:+    http-client == 0.5.*,+    http-client-tls == 0.3.*,     http-response-decoder >= 0.2 && < 0.3,-    http-client >= 0.4.27 && < 0.6,     uri-encode >= 1.5 && < 2,     -- json:     json-encoder >= 0.1.5 && < 0.2,@@ -67,4 +73,3 @@     transformers >= 0.4 && < 0.6,     base-prelude < 2,     base < 5-