h$(      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK L  Safe-InferredgMNOPQRSTNone  servant-benchmarkGiven a function (a -> BasicAuthData), produce an authorization header from a random value of a Safe-Inferred servant-benchmarkAn API endpoint. -servant-benchmarkThe request value, where applicable. Only the first encountered request value is taken into consideration eg. "user" :> ReqBody '[JSON] Text :> ReqBody '[JSON] Int :> Get '[JSON] User will produce only a Text based request valueservant-benchmarkThe requests content type. Only the first encountered content type is taken into consideration. If you're building an endpoint manually, you should enter the media type here rather than directly in headers. All implementations automatically include the content type header during benchmark configuration output.servant-benchmarkThe request headers servant-benchmarkPack an endpoint created from an API interpretation in a form ready to be serialized. - This is only useful if your are building your own output. servant-benchmark Create a U from two Text inputs servant-benchmarkapplication/json servant-benchmarktext/plain ; charset=utf-8 servant-benchmark applicationservant-benchmarkjsonservant-benchmarktextservant-benchmarkplainservant-benchmarkcharsetservant-benchmarkutf-8  None ./ servant-benchmark:A Generator provides value level interpretation of an API.The / type must closely follow the structure of the Servant API.*Different endpoints are combined with the  operator+Different generators are combined with the  operatorEvery endpoint must end with a `(Text, Word)` tuple consisting of the endpoint name and its corresponding weight. Endpoint names are only used for additional information passed to the benchmark implementations and do not have to follow specific rules. That being said, generators for extensive APIs can get rather big and hard to read, so providing sensible naming could be very beneficial.The weight of an endpoint specifies the number of instances per testing run of the API. Endpoints with 0 weight will be ignored.For every API combinator expecting a request value, a `Gen a` random value generator from the  .https://hackage.haskell.org/package/QuickCheck QuickCheck package must be provided.4The following combinators require a value generator:VWXYZ[For the \, combinator, see the dedicated section below(As an example, the following is a valid  for a contrived servant API 2type API = "books" :> Get '[JSON] [Book] : | "view-my-referer" :> Header "from" Referer :> Get '[JSON] Referer : | "users" :> Capture "userId" Integer :> ReqBody '[JSON] User :> Put '[JSON] User : |? "post" :> QueryParam "segments" Text :> Get '[JSON] Post : | Raw generator :: Generator API let generator = ("books", 1) :|: arbitrary :>: ("referer", 2) :|: pure 1001 :>: arbitrary :>: ("users endpoint", 2) :|: elements ["title", "contents", "post"] :>: ("post", 4) :|: ("raw", 0) The first endpoint "books" does not require request data and so only the name / weight tuple is provided.The "view-my-referer" endpoint requires a "from" header with an accompanying Referer value. Here we assume Referer has an  Arbitrary instance to provide a random value. The endpoint generator finishes with the name/weight indication.The "users" endpoint requires two different request values. An Integer capture representing a user id as well as a User= value. We hard-code the user id to `1001` using the monadic ] and assume that User has an  Arbitrary instance to produce a random value. We finish with the endpoint's name/weight as necessary.The "post" endpoint requires a Text query parameter. We provide a fixed set of possible values using the elements function from the  QuickCheck package. With a weight of 4, four instances of the "post" endpoint will be produced, each with a random value from the specified set.Finally our API provides a ^ endpoint for serving static files, but we'd rather not benchmark it. Providing a 0 weight ensures that no request will be generated Basic Auth$A generator for an endpoint using a \ combinator requires both a function to convert the requested user data type to _ as well as a `# value for the requested user data.example: type privateAPI = "private" :> BasicAuth "foo-realm" User :> PrivateAPI toBasicAuthData :: User -> BasicAuthData toBasicAuthData user = ... -- assuming User has an  Arbitrary instance let generator = toBasicAuthData :>: arbitrary :>: ("basicAuth", 1) &The information will be encoded as an  Authorization header.servant-benchmark Value level 4 combinator. Build endpoint generators by combining `) values with (description, weight) tuplesexample:  -- A single endpoint API type API = "authors" :> "authors" :> ReqBody '[PlainText] String :> Post '[JSON] [Author] generator :: Generator API generator = elements [ Cervantes, Kant] :>: ("authors", 2) servant-benchmark Value level  combinator. Combine endpoint generators to build an API generatorexample: -- The API we want to benchmark type API = "books" :> Get '[JSON] Book : | "authors" :> "authors" :> ReqBody '[PlainText] String :> Post '[JSON] [Author] generator :: Generator API generator = ("books", 1) :|: elements [ Cervantes, Kant] :>: ("authors", 2) 9 9 33 Safe-Inferred />servant-benchmark3Types that can be converted to Text and serialized.None  ./>@$servant-benchmarkHasEndpoint provides type level interpretation of an API Endpoint$%&$%&None 0>W;servant-benchmarkHasGenerator provides combined type and value level interpretation of an API, producing corresponding  values.Instructions on forming a / type can be found on the module documentation.;<;< Nonez$%&;<;<$%&None &?servant-benchmark+Drill specific settings. See the project's  "https://github.com/fcsonline/drill documentation for more detailsEservant-benchmark(Export a benchmark file given a list of s?@BACDE?@BACDE Safe-Inferred Gservant-benchmarkSiege settings.Jservant-benchmarkExport a URL files path. Note that since Siege-@.06 and later, only the POST and GET directives are supported. All other methods will not produce a url in the URLs file.GHIJJGHI None "Kservant-benchmark'Export a requests file given a list of sKK   !"#$$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPIJQO O P R S T U V W X YZ[\]^_]`a]bc]bd]e\]fg]hiLjk]lm]hnopq0servant-benchmark-0.1.2.0-LMUTHqKCoEbKSnt5bDLvJ8Servant.Benchmark.BasicAuthServant.Benchmark.EndpointServant.Benchmark.GeneratorServant.Benchmark.ToTextServant.Benchmark.HasEndpointServant.Benchmark.HasGeneratorServant.Benchmark.Tools.DrillServant.Benchmark.Tools.SiegeServant.Benchmark.Tools.WrkPaths_servant_benchmarkServant.BenchmarkencodeBasicAuthEndpoint MkEndpointnamepathmethodbody contentTypeheaderspackmkHeaderctJSON ctPlainText hApplicationhJSONhTexthPlainhCharsethUTF8$fMonoidEndpoint$fSemigroupEndpoint$fShowEndpoint $fEqEndpoint Generator:>::|:ToTexttoText $fHasTextRepresentationTypeShowa+$fHasTextRepresentationTypeMethodByteString/$fHasTextRepresentationTypeByteStringByteString#$fHasTextRepresentationTypeTextText#$fHasTextRepresentationTypeString[] $fToTexta HasEndpoint getEndpointweight$fHasEndpointRaw$fHasEndpoint:>$fHasEndpoint:>0$fHasEndpoint:>1$fHasEndpointWithNamedContext$fHasEndpoint:>2$fHasEndpoint:>3$fHasEndpoint:>4$fHasEndpointEmptyAPI$fHasEndpoint:>5$fHasEndpoint:>6$fHasEndpoint:>7$fHasEndpoint:>8$fHasEndpoint:>9$fHasEndpoint:>10$fHasEndpoint:>11$fHasEndpoint:>12$fHasEndpointNoContentVerb$fHasEndpointVerb$fHasEndpoint:>13 HasGeneratorgenerate$fHasGeneratora$fHasGenerator:<|>Settings MkSettings concurrencybase iterationsrampupexport$fToJSONOutputrootversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName(http-types-0.12.3-DcXfe2dCkbAIkHqlTY7ClmNetwork.HTTP.Types.HeaderHeader$servant-0.18.3-8VOYfEpda19feIUb3cjSGServant.API.ReqBodyReqBodyServant.API.QueryParam QueryParamsServant.API.CaptureCapture CaptureAllServant.API.HeaderServant.API.FragmentFragmentServant.API.BasicAuth BasicAuthGHC.BasepureServant.API.RawRaw BasicAuthData(QuickCheck-2.14.2-4AXVKUm0cEuJosNbpttvUpTest.QuickCheck.GenGen