Lucu-0.1: HTTP Daemonic Library

Network.HTTP.Lucu.Resource.Tree

Description

Repository of the resources in httpd.

Synopsis

Documentation

data ResourceDef Source

ResourceDef is basically a set of Resource monads for each HTTP methods.

Constructors

ResourceDef 

Fields

resUsesNativeThread :: !Bool

Whether 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
             ]