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 +45/−0
- library/Solr/Effect.hs +8/−0
- library/Solr/Effect/Effect.hs +43/−0
- library/Solr/Managed.hs +25/−0
- library/Solr/Session.hs +0/−50
- solr.cabal +11/−6
+ 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-