Lucu-0.3.2: HTTP Daemonic LibrarySource codeContentsIndex
Network.HTTP.Lucu.Resource.Tree
Description
Repository of the resources in httpd.
Synopsis
data ResourceDef = ResourceDef {
resUsesNativeThread :: !Bool
resIsGreedy :: !Bool
resGet :: !(Maybe (Resource ()))
resHead :: !(Maybe (Resource ()))
resPost :: !(Maybe (Resource ()))
resPut :: !(Maybe (Resource ()))
resDelete :: !(Maybe (Resource ()))
}
data ResTree
type FallbackHandler = [String] -> IO (Maybe ResourceDef)
mkResTree :: [([String], ResourceDef)] -> ResTree
Documentation
data ResourceDef Source
ResourceDef is basically a set of Resource monads for each HTTP methods.
Constructors
ResourceDef
resUsesNativeThread :: !BoolWhether to run a Resource on a native thread (spawned by forkOS) or to run it on a user thread (spanwed by forkIO). Generally you don't need to set this field to True.
resIsGreedy :: !Bool

Whether to be greedy or not.

Say a client is trying to access /aaa/bbb/ccc. If there is a greedy resource at /aaa/bbb, it is always chosen even if there is another resource at /aaa/bbb/ccc. If the resource at /aaa/bbb is not greedy, it is just ignored. Greedy resources are like CGI scripts.

resGet :: !(Maybe (Resource ()))

A Resource to be run when a GET request comes for the resource path. If resGet is Nothing, the system responds "405 Method Not Allowed" for GET requests.

It also runs for HEAD request if the resHead is Nothing. In this case output and such like don't actually write a response body.

resHead :: !(Maybe (Resource ()))A Resource to be run when a HEAD request comes for the resource path. If resHead is Nothing, the system runs resGet instead. If resGet is also Nothing, the system responds "405 Method Not Allowed" for HEAD requests.
resPost :: !(Maybe (Resource ()))A Resource to be run when a POST request comes for the resource path. If resPost is Nothing, the system responds "405 Method Not Allowed" for POST requests.
resPut :: !(Maybe (Resource ()))A Resource to be run when a PUT request comes for the resource path. If resPut is Nothing, the system responds "405 Method Not Allowed" for PUT requests.
resDelete :: !(Maybe (Resource ()))A Resource to be run when a DELETE request comes for the resource path. If resDelete is Nothing, the system responds "405 Method Not Allowed" for DELETE requests.
data ResTree Source
ResTree is an opaque structure which is a map from resource path to ResourceDef.
type FallbackHandler = [String] -> IO (Maybe ResourceDef)Source
FallbackHandler is an extra resource handler for resources which can't be statically located somewhere in the resource tree. The Lucu httpd first search for a resource in the tree, and then call fallback handlers to ask them for a resource. If all of the handlers returned Nothing, the httpd responds with 404 Not Found.
mkResTree :: [([String], ResourceDef)] -> ResTreeSource

mkResTree converts a list of (path, def) to a ResTree e.g.

   mkResTree [ ([]        , Network.HTTP.Lucu.StaticFile.staticFile "/usr/include/stdio.h" ) -- /
             , (["unistd"], Network.HTTP.Lucu.StaticFile.staticFile "/usr/include/unistd.h") -- /unistd
             ]
Produced by Haddock version 2.4.2