servant-jquery-0.4.2: Automatically derive (jquery) javascript functions to query servant webservices

Copyright(C) 2014 Alp Mestanogullari
LicenseBSD3
MaintainerAlp Mestanogullari <alpmestan@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Servant.JQuery

Description

 

Synopsis

Documentation

jquery :: HasJQ layout => Proxy layout -> JQ layout Source

jsForAPI :: (HasJQ api, GenerateCode (JQ api)) => Proxy api -> String Source

Directly generate all the javascript functions for your API from a Proxy for your API type. You can then write it to a file or integrate it in a page, for example.

data Segment Source

Constructors

Segment 

Instances

data SegmentType Source

Constructors

Static String

a static path segment. like "/foo"

Cap Arg

a capture. like "/:userid"

data ArgType Source

Constructors

Normal 
Flag 
List 

Instances

data QueryArg Source

Constructors

QueryArg 

Fields

_argName :: Arg
 
_argType :: ArgType
 

Instances

toValidFunctionName :: String -> String Source

Attempts to reduce the function name provided to that allowed by JS. https://mathiasbynens.be/notes/javascript-identifiers Couldn't work out how to handle zero-width characters. @TODO: specify better default function name, or throw error?

data Url Source

Constructors

Url 

Fields

_path :: Path
 
_queryStr :: [QueryArg]
 

Instances

type family Elem a ls :: Constraint Source

Equations

Elem a [] = False ~ True 
Elem a (a : list) = () 
Elem a (b : list) = Elem a list 

class HasJQ layout where Source

Associated Types

type JQ layout :: * Source

Methods

jqueryFor :: Proxy layout -> AjaxReq -> JQ layout Source

Instances

HasJQ Raw 
(HasJQ a, HasJQ b) => HasJQ ((:<|>) a b) 
Elem JSON list => HasJQ (Get list a) 
Elem JSON list => HasJQ (Post list a) 
Elem JSON list => HasJQ (Delete list a) 
Elem JSON list => HasJQ (Put list a) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (Capture * sym a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (Header sym a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (QueryParam * sym a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (QueryParams * sym a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (QueryFlag sym) sublayout) 
(Elem JSON list, HasJQ sublayout) => HasJQ ((:>) * * (ReqBody * list a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (MatrixParam * sym a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (MatrixParams * sym a) sublayout) 
(KnownSymbol sym, HasJQ sublayout) => HasJQ ((:>) * * (MatrixFlag sym) sublayout) 
(KnownSymbol path, HasJQ sublayout) => HasJQ ((:>) Symbol * path sublayout) 

class GenerateCode reqs where Source

Utility class used by jsForAPI which will directly hand you all the Javascript code instead of handing you a :<|>-separated list of AjaxReq like jquery and then having to use generateJS on each AjaxReq.

Methods

jsFor :: reqs -> String Source