Îõ³h$'È%¡      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ None -.3>?ÀÁÂÉÎÖ×Ù$servant-foreignÈCanonical 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-foreignÄMaps 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-foreignæThe 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-foreignåThe 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 type _ = "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.Ù #$%&'+-,./0126798:;<@BADCEFJKLMPONQRSWX_^]\[ZY`bacdemnopqsrtuvwxyz{|}~Ù  '&#$%012/+-,.<;:6798FE@BADCKJRQLMPONSedc`baWX_^]\[ZY}|{zyxw~uvtqsropmnNone à›servant-foreign5Simply concat each part of the FunctionName together. 7[ "get", "documents", "by", "id" ] ’C "getdocumentsbyid"servant-foreignØUse the snake_case convention. Each part is separated by a single underscore character. :[ "get", "documents", "by", "id" ] ’C "get_documents_by_id"Ÿservant-foreignòUse 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"›œžŸ ›Ÿœž None…¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊÉËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿþ€€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›¦œž¢Ÿ¤£ ¡¢£¤¥¦§¨©ª«¬­®§¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌ #$%&'+.,-/126789:;<@ABCDEFJLMNOPQRWXYZ[\]^_`abdemnqrstuvwxyz{|}~›œžŸ ÒWXYZ[\]^_~uvmnqrstLMNOP/#$%126789+.,-@ABCD`ab }{zwx|ydeEFJQR&':;<Í       !"#$%%&'()*+,-./01234567789:;<=>?@@ABCDEFGHIJKKLMNOPQRSTUUVWXYZ[\]^_`abcdefghijkllmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡Ÿ ¢Ÿ £¤¥¦Ÿ§¨Ÿ©ª¤«¬­®¯­®°­®±­®²­®³­®´­®µ­®¶­®·¸¹º¸¹º¸¹»¸¹¼¸½¾¸½¿¸½À¸½Á¸½Â¸½Ã¸½Ä¸½Å¸½Æ¸½ÇÈÉÊÈÉÊÈÉËÈÉÌÈÉÍÈÉÎÈÉÏŸÐÑŸÐÒŸÐÓŸÐÔŸÐÕŸÖ×ŸÖØŸÖÙŸÖÚŸÖÛŸÖÜŸÖÝŸÖÞŸÖߟÖàŸÖáŸÖâŸÖãŸÖäŸÖåŸÖæŸÖçŸèéŸêëŸêìŸíîŸíïŸíðŸíñŸíòŸíóŸíôŸíõŸíöŸí÷ŸíøŸíùŸíúŸíûŸíüŸíýŸíþŸíÿŸí€ŸíŸí‚ŸíƒŸí„Ÿí…Ÿí†Ÿí‡ŸíˆŸí‰ŸíŠŸ‹ŒŸ‹Ÿ‹ŽŸ‹Ÿ‹Ÿ‹Ÿ‹‘Ÿ’“Ÿ’”Ÿ’•Ÿ–—Ÿ˜™Ÿ˜šŸ˜›Ÿ˜œŸ˜œŸ˜Ÿ˜žŸ˜ŸŸ˜ Ÿ˜¡Ÿ˜¢Ÿ˜£Ÿ˜¤Ÿ˜¥Ÿ˜¦Ÿ˜§Ÿ˜¨Ÿ˜©Ÿ˜ªŸ˜«Ÿ§¬Ÿ­®Ÿ¯°Ÿ ±Ÿ²¡Ÿ²³Ÿ´µŸ´¶Ÿ´·Ÿ´¸Ÿ¹ºŸ¹»Ÿ¹¼Ÿ½¾Ÿ¿ÀŸÁŸÁŸÃÄŸÃÅŸ©ÆŸ©ÇŸ©ÈŸ©ÉŸ©ÊŸ©ËŸ©ÌŸ©ÍŸ©ÎŸ©ÏŸ©ÐŸ©ÑŸ©ÑŸÒÓŸÒÔŸÒÕŸÖ×ŸÖØŸÖØŸÖÙŸÖÚŸÛÜŸÛÜÝÞßàáâàáãàáäàáåàáæŸ’çè-servant-foreign-0.15.4-32u2THJai6IABNh1wpWcWfServant.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$fHasForeignklangftype:>$fHasForeignklangftype:>0$fHasForeignklangftype:>1&$fHasForeignklangftypeWithNamedContext$fHasForeignklangftype:>2$fHasForeignklangftype:>3$fHasForeignklangftype:>4$fHasForeignklangftype:>5$fHasForeignklangftype:>6$fHasForeignklangftype:>7$fHasForeignklangftypeRaw$fHasForeignklangftype:>8$fHasForeignklangftype:>9$fHasForeignklangftype:>10$fHasForeignklangftype:>11$fHasForeignklangftype:>12$fHasForeignklangftypeStream#$fHasForeignklangftypeNoContentVerb$fHasForeignklangftypeVerb$fHasForeignklangftype:>13$fHasForeignklangftype:>14$fHasForeignklangftype:<|>$fHasForeignklangftypeEmptyAPI$fGenerateListftype:<|>$fGenerateListftypeReq"$fGenerateListftypeEmptyForeignAPI concatCase concatCaseL snakeCase snakeCaseL camelCaseL text-1.2.3.2Data.Text.InternalText%servant-0.18.3-GUJwwHCYukAE9mgDRQwnapServant.API.QueryParam QueryParam QueryFlag QueryParamsbase GHC.MaybeMaybeServant.API.ReqBodyReqBodyServant.API.ContentTypesJSONData.Type.BoolIf*http-api-data-0.4.3-82K6tJ8xTwJ1qHWfBUkE6YWeb.Internal.HttpApiData ToHttpApiData toQueryParamtoHeader toUrlPiecetoEncodedUrlPieceFromHttpApiDataparseQueryParam parseUrlPiece parseHeader(http-types-0.12.3-4GNA9TDzoeBAsbUUnfJUjtNetwork.HTTP.Types.Version HttpVersion httpMajor httpMinorNetwork.HTTP.Types.Method StdMethodPATCHOPTIONSCONNECTTRACEDELETEPUTHEADGETPOST*network-uri-2.6.4.1-3rjR9AKf8Rm5zFnzIORPH4 Network.URIURI uriFragmenturiQueryuriPath uriScheme uriAuthority Servant.LinkssafeLinkLinkMkLinkHasLinktoLinkServant.API.StreamStream StreamGet StreamPost StreamBody StreamBody'SourceIO ToSourceIO toSourceIO FromSourceIO fromSourceIO FramingRender framingRenderFramingUnrenderframingUnrender NoFramingNewlineFramingNetstringFramingServant.API.WithNamedContextWithNamedContextServant.API.TypeLevelIsElem'IsElemServant.API.VerbsVerb NoContentVerbGetPostPutDeletePatch PostCreated PutCreated GetAccepted PostAcceptedDeleteAccepted PatchAccepted PutAcceptedGetNonAuthoritativePostNonAuthoritativeDeleteNonAuthoritativePatchNonAuthoritativePutNonAuthoritative GetNoContent PostNoContentDeleteNoContentPatchNoContent PutNoContentGetResetContentPostResetContentGetPartialContent ReflectMethod reflectMethodServant.API.UVerbstatusOfStatusOf HasStatusStatuses WithStatusUVerbServant.API.UVerb.UnionUnionIsMemberUniqueServant.API.Sub:>Servant.API.ResponseHeaderslookupResponseHeadernoHeader addHeaderHeaders getResponsegetHeadersHListResponseHeaderUndecodableHeaderHeader MissingHeaderHListHNilHConsBuildHeadersTobuildHeadersTo GetHeaders getHeaders AddHeaderHasResponseHeaderReqBody'Servant.API.RemoteHost RemoteHostServant.API.RawRaw QueryParam'Servant.API.HeaderHeader'Servant.API.ModifiersRequiredOptionalLenientStrictServant.API.IsSecureIsSecureSecure NotSecureServant.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 BasicAuthDatabasicAuthUsernamebasicAuthPasswordServant.API.Alternative:<|>"vault-0.3.1.5-KKwRB0SKwIpPh8Jcsln8Data.Vault.LazyVault+singleton-bool-0.1.6-5eg1r7MDxWoLb4t7sqRp7nData.Singletons.BoolSBoolIsboolSBoolSFalseSTrueinject