h&(l      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred"/06($servant-foreignCanonical name of the endpoint, can be used to generate a function name.You can use the functions in Servant.Foreign.Inflections, like  to transform to .servant-foreignSee documentation of servant-foreignMaps a name to the foreign type that belongs to the annotated value.3Used for header args, query args, and capture args.servant-foreignThe name to be captured.7Only for capture args it really denotes a path segment.servant-foreign+Foreign type the associated value will haveservant-foreignStatic path segment.  "foo/bar/baz"contains the static segments "foo", "bar" and "baz".servant-foreign A capture. "user/{userid}/name"would capture the arg userid with type ftype.#servant-foreignA part of the Url@s path.+servant-foreign Type of a 6.1servant-foreignWhether a segment is a .2servant-foreign2Crashing Arg extraction from segment, TODO: remove6servant-foreignUrl Query argument.Urls can contain query arguments, which is a list of key-value pairs. In a typical url, query arguments look like this: &?foo=bar&alist[]=el1&alist[]=el2&aflagEach pair can be?foo=bar5: a plain key-val pair, either optional or required ()?aflag1: a flag (no value, implicitly Bool with default false if it@s missing) ()?alist[]=el1&alist[]=el2: list of values () _queryArgType will be set accordingly.For the plain key-val pairs (),  _queryArgName@s ftype will be wrapped in a Maybe if the argument is optional.8servant-foreign:Name and foreign type of the argument. Will be wrapped in > if the query is optional and in a `[]` if the query is a list9servant-foreign!one of normal/plain, list or flagAservant-foreign9The name of the header and the foreign type of its value.Bservant-foreignUnused, will never be set. TODO: removeLservant-foreign3Full endpoint url, with all captures and parametersNservant-foreign4Url path, list of either static segments or captures "foo/{id}/bar"Oservant-foreignList of query args "?foo=bar&a=b"Pservant-foreign Url fragment.Not sent to the HTTP server, so only useful for frontend matters (e.g. inter-page linking).  #fragmentTextWservant-foreign:Full description of an endpoint in your API, generated by . It should give you all the information needed to generate foreign language bindings.Every field containing ftype1 will use the foreign type mapping specified via u+ (see its docstring on how to set that up).See  8https://docs.servant.dev/en/stable/tutorial/ApiType.html for accessible documentation of the possible content of an endpoint.Yservant-foreign-Full list of URL segments, including capturesZservant-foreign"GET"/"POST"/"PUT"/@[servant-foreign2Headers required by this endpoint, with their type\servant-foreign+Foreign type of the expected request body ( ), if any]servant-foreign(The foreign type of the response, if any^servant-foreignThe URL segments rendered in a way that they can be easily concatenated into a canonical function name_servant-foreign4The content type the request body is transferred as.This is a severe limitation of servant-foreign5 currently, as we only allow the content type to be " no user-defined content types. (b is not actually implemented.)-Thus, any routes looking like this will work: "foo" :> Get '[JSON] Foowhile routes like &"foo" :> Get '[MyFancyContentType] Foowill fail with an error like -@ JSON expected in list '[MyFancyContentType]`servant-foreignSee documentation of _mservant-foreignUtility class used by  which computes the data needed to generate a function for each endpoint and hands it all back in a list.qservant-foreign.Implementation of the Servant framework types.*Relevant instances: Everything containing u.tservant-foreignThe language definition without any foreign types. It can be used for dynamic languages which do not do type annotations.uservant-foreignu maps Haskell types with types in the target language of your backend. For example, let's say you're implementing a backend to some language X, and you want a Text representation of each input/output type mentioned in the API: -- First you need to create a dummy type to parametrize your -- instances. data LangX -- Otherwise you define instances for the types you need instance HasForeignType LangX Text Int where typeFor _ _ _ = "intX" -- Or for example in case of lists instance HasForeignType LangX Text a => HasForeignType LangX Text [a] where typeFor lang ftype _ = "listX of " <> typeFor lang ftype (Proxy :: Proxy a)Finally to generate list of information about all the endpoints for an API you create a function of a form: getEndpoints :: (HasForeign LangX Text api, GenerateList Text (Foreign Text api)) => Proxy api -> [Req Text] getEndpoints api = listFromAPI (Proxy :: Proxy LangX) (Proxy :: Proxy Text) api -- If language __X__ is dynamically typed then you can use -- a predefined NoTypes parameter with the NoContent output type: getEndpoints :: (HasForeign NoTypes NoContent api, GenerateList Text (Foreign NoContent api)) => Proxy api -> [Req NoContent] getEndpoints api = listFromAPI (Proxy :: Proxy NoTypes) (Proxy :: Proxy NoContent) api servant-foreign8Generate the necessary data for codegen as a list, each W/ describing one endpoint from your API type.servant-foreign4Use if the foreign language does not have any types.servant-foreign*TODO: doesn't taking framing into account. #%$&'+-,./0126987:;<@DCBAEFJKLPONMQRSW_^]\[ZYX`bacdemnopqsrtuvwxyz{|}~  '&#%$012/+-,.<;:6987FE@DCBAKJRQLPONMSedc`baW_^]\[ZYX}|{zyxw~uvtqsropmn Safe-Inferred"servant-foreign5Simply concat each part of the FunctionName together. 7[ "get", "documents", "by", "id" ] C "getdocumentsbyid"servant-foreignUse the snake_case convention. Each part is separated by a single underscore character. :[ "get", "documents", "by", "id" ] C "get_documents_by_id"servant-foreignUse the camelCase convention. The first part is lower case, every other part starts with an upper case character. 7[ "get", "documents", "by", "id" ] C "getDocumentsById" Safe-Inferred> #$%&'+.,-/126789:;<@ABCDEFJLMNOPQRWXYZ[\]^_`abdemnqrstuvwxyz{|}~WXYZ[\]^_~uvmnqrstLMNOP/#$%126789+.,-@ABCD`ab }{zwx|ydeEFJQR&':;<       !"#$%%&'()*+,-./01234567789:;<=>?@@ABCDEFGHIJKKLMNOPQRSTUUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyz{|}~*servant-foreign-0.16-DnBtzRMDjREgtGXiT2u9IServant.Foreign.InternalServant.Foreign.Inflections camelCaseServant.Foreign FunctionNameunFunctionName$fDataFunctionName$fShowFunctionName$fEqFunctionName$fSemigroupFunctionName$fMonoidFunctionName PathSegment unPathSegment _FunctionName$fDataPathSegment$fShowPathSegment$fEqPathSegment$fIsStringPathSegment$fSemigroupPathSegment$fMonoidPathSegmentArg_argName_argType _PathSegment $fDataArg$fEqArg $fShowArg SegmentTypeStaticCapargNameargTypeargPath$fDataSegmentType$fEqSegmentType$fShowSegmentTypeSegment unSegment_Static_Cap $fDataSegment $fEqSegment $fShowSegmentArgTypeNormalFlagListPath_Segment isCapture captureArg $fDataArgType $fEqArgType $fShowArgTypeQueryArg _queryArgName _queryArgType_Normal_Flag_List$fDataQueryArg $fEqQueryArg$fShowQueryArg HeaderArgReplaceHeaderArg _headerArg_headerPattern queryArgName queryArgType$fDataHeaderArg $fEqHeaderArg$fShowHeaderArg headerArg headerPatternUrl_path _queryStr_frag _HeaderArg_ReplaceHeaderArgdefUrl $fDataUrl$fEqUrl $fShowUrlReq_reqUrl _reqMethod _reqHeaders_reqBody_reqReturnType _reqFuncName_reqBodyContentTypeReqBodyContentType ReqBodyJSONReqBodyMultipartfragpathqueryStr $fDataReq$fEqReq $fShowReq$fDataReqBodyContentType$fEqReqBodyContentType$fShowReqBodyContentType$fReadReqBodyContentType GenerateList generateListEmptyForeignAPI HasForeignForeign foreignForNoTypesHasForeignTypetypeForreqBodyreqBodyContentType reqFuncName reqHeaders reqMethod reqReturnTypereqUrldefReq listFromAPI&$fHasForeignTypeTYPEkNoTypesNoContenta!$fHasForeignklangftypeNamedRoutes$fHasForeignklangftype:>$fHasForeignklangftype:>0$fHasForeignklangftype:>1$fHasForeignklangftype:>2&$fHasForeignklangftypeWithNamedContext$fHasForeignklangftype:>3$fHasForeignklangftype:>4$fHasForeignklangftype:>5$fHasForeignklangftype:>6$fHasForeignklangftype:>7$fHasForeignklangftype:>8$fHasForeignklangftypeRaw$fHasForeignklangftype:>9$fHasForeignklangftype:>10$fHasForeignklangftype:>11$fHasForeignklangftype:>12$fHasForeignklangftype:>13$fHasForeignklangftypeStream#$fHasForeignklangftypeNoContentVerb$fHasForeignklangftypeVerb$fHasForeignklangftype:>14$fHasForeignklangftype:>15$fHasForeignklangftype:<|>$fHasForeignklangftypeEmptyAPI$fGenerateListftype:<|>$fGenerateListftypeReq"$fGenerateListftypeEmptyForeignAPI concatCase concatCaseL snakeCase snakeCaseL camelCaseLbase GHC.TypeLits ErrorMessage#servant-0.20-GjInsRzihxVJzApzfxsmRTServant.API.QueryParam QueryParam QueryFlag QueryParams GHC.MaybeMaybeServant.API.ReqBodyReqBodyServant.API.ContentTypesJSONData.Type.BoolIf*http-api-data-0.5.1-ANC48HMLgdD96mIwSzZ08hWeb.Internal.HttpApiData ToHttpApiDatatoEncodedQueryParam toQueryParamtoHeader toUrlPiecetoEncodedUrlPieceFromHttpApiDataparseQueryParam parseUrlPiece parseHeader(http-types-0.12.3-L3rcKlUfVN0BViQ440kXJlNetwork.HTTP.Types.Version HttpVersion httpMinor httpMajorNetwork.HTTP.Types.Method StdMethodPATCHOPTIONSCONNECTTRACEDELETEPUTHEADGETPOST*network-uri-2.6.4.2-HOWkOsJ6iQ9LdZ2sAMVHdr Network.URIURI uriFragmenturiQueryuriPath uriAuthority uriScheme Servant.LinkssafeLinkLinkMkLinkHasLinktoLinkServant.API.StreamStream StreamGet StreamPost StreamBody StreamBody'SourceIO ToSourceIO toSourceIO FromSourceIO fromSourceIO FramingRender framingRenderFramingUnrenderframingUnrender NoFramingNewlineFramingNetstringFramingServant.API.WithResource WithResourceServant.API.WithNamedContextWithNamedContextServant.API.TypeLevelIsElem'IsElemServant.API.VerbsVerb NoContentVerbGetPostPutDeletePatch PostCreated PutCreated GetAccepted PostAcceptedDeleteAccepted PatchAccepted PutAcceptedGetNonAuthoritativePostNonAuthoritativeDeleteNonAuthoritativePatchNonAuthoritativePutNonAuthoritative GetNoContent PostNoContentDeleteNoContentPatchNoContent PutNoContentGetResetContentPostResetContentGetPartialContent ReflectMethod reflectMethodServant.API.UVerbstatusOfStatusOf HasStatusStatuses WithStatusUVerbServant.API.ResponseHeaderslookupResponseHeadernoHeader addHeaderHeadersgetHeadersHList getResponseResponseHeaderUndecodableHeaderHeader MissingHeaderHListHNilHConsBuildHeadersTobuildHeadersTo GetHeaders getHeaders AddHeaderHasResponseHeaderServant.API.UVerb.UnionUnionIsMemberUniqueServant.API.Sub:>ReqBody'Servant.API.RemoteHost RemoteHostServant.API.RawRawRawM QueryParam'Servant.API.NamedRoutes NamedRoutesServant.API.HeaderHeader'Servant.API.ModifiersRequiredOptionalLenientStrictServant.API.IsSecureIsSecureSecure NotSecureServant.API.Generic genericApi fromServant toServantGenericServant:- GenericMode ToServant ToServantApiAsApiGServantProductServant.API.FragmentFragmentServant.API.Experimental.Auth AuthProtectServant.API.EmptyEmptyAPIServant.API.DescriptionSummary Description PlainTextFormUrlEncoded OctetStreamAccept contentType contentTypes MimeRender mimeRender MimeUnrender mimeUnrendermimeUnrenderWithType NoContentServant.API.CaptureCaptureCapture' CaptureAllServant.API.BasicAuth BasicAuth BasicAuthDatabasicAuthPasswordbasicAuthUsernameServant.API.Alternative:<|>$vault-0.3.1.5-Hr4jtqr0YJv1PlovxHdayyData.Vault.LazyVault+singleton-bool-0.1.7-EBSoblHddPp7uGRhNdvaIVData.Singletons.BoolSBoolIsboolSBoolSFalseSTrueinject