module Solr.Parameters
(
builderEncoder_parameters,
Parameters,
parameters_select,
Select,
select_q,
select_start,
select_rows,
)
where
import Solr.Prelude
import qualified Network.URI.Encode
import qualified ByteString.TreeBuilder
builderEncoder_parameters :: Parameters a -> a -> ByteString.TreeBuilder.Builder
builderEncoder_parameters (Parameters (Op impl)) =
\input ->
fold $
intersperse "&" $
fmap pairMapping $
impl input []
where
pairMapping (name, value) =
if ByteString.TreeBuilder.length value == 0
then name
else name <> "=" <> value
newtype Parameters a =
Parameters (Op ([(ByteString.TreeBuilder.Builder, ByteString.TreeBuilder.Builder)] -> [(ByteString.TreeBuilder.Builder, ByteString.TreeBuilder.Builder)]) a)
deriving (Contravariant, Divisible, Decidable, Semigroup, Monoid)
parameters_parameter :: Parameters (ByteString.TreeBuilder.Builder, ByteString.TreeBuilder.Builder)
parameters_parameter =
Parameters $
Op $
\(name, value) ->
(:) (name, value)
parameters_select :: Select a -> Parameters a
parameters_select (Select spec) =
spec
newtype Select a =
Select (Parameters a)
deriving (Contravariant, Divisible, Decidable, Semigroup, Monoid)
select_q :: Select Text
select_q =
Select $
contramap (ByteString.TreeBuilder.byteString . Network.URI.Encode.encodeTextToBS) $
contramap (\x -> ("q", x)) $
parameters_parameter
select_start :: Select Int
select_start =
Select $
contramap (ByteString.TreeBuilder.asciiIntegral) $
contramap (\x -> ("start", x)) $
parameters_parameter
select_rows :: Select Int
select_rows =
Select $
contramap (ByteString.TreeBuilder.asciiIntegral) $
contramap (\x -> ("rows", x)) $
parameters_parameter