-- | Lucu is an HTTP daemonic library. It can be embedded in any
-- Haskell program and runs in an independent thread.
--
-- Features:
--
--   [/Full support of HTTP\/1.1/] Lucu supports request pipelining,
--   chunked I\/O, ETag comparison and \"100 Continue\".
--
--   [/Performance/] Lucu doesn't fork\/exec to handle requests like
--   CGI. It just spawns a new thread. Inter-process communication is
--   done with STM.
--
--   [/Affinity for RESTafarians/] Lucu is a carefully designed
--   web server for RESTful applications.
--
--   [/SSL connections/] Lucu can handle HTTP connections over SSL
--   layer.
--
-- Lucu is not a replacement for Apache. It is intended to be used to
-- create an efficient web-based application without messing around
-- FastCGI. It is also intended to be run behind a reverse-proxy so it
-- doesn't have the following (otherwise essential) facilities:
--
--   [/Logging/] Lucu doesn't log any requests from any clients.
--
--   [/Client Filtering/] Lucu always accepts any clients. No IP
--   filter is implemented.
--
--   [/Bandwidth Limitting/] Lucu doesn't limit bandwidth it consumes.
--
--   [/Protection Against Wicked Clients/] Lucu is fragile against
--   wicked clients. No attacker should be able to cause a
--   buffer-overflow but can possibly DoS it.
--


module Network.HTTP.Lucu
    ( -- * Entry Point
      runHttpd

      -- * Configuration
    , module Network.HTTP.Lucu.Config

      -- * Resource Tree
    , ResourceDef(..)
    , emptyResource
    , ResTree
    , mkResTree

      -- * Resource Monad
    , module Network.HTTP.Lucu.Resource

      -- ** Things to be used in the Resource monad

      -- *** Status Code
    , StatusCode(..)

      -- *** Abortion
    , abort
    , abortPurely
    , abortA

      -- *** ETag
    , ETag(..)
    , strongETag
    , weakETag

      -- *** MIME Type
    , MIMEType(..)

      -- *** Authorization
    , AuthChallenge(..)
    , AuthCredential(..)
    
      -- * Utility

      -- ** Static file handling
    , module Network.HTTP.Lucu.StaticFile
    )
    where

import Network.HTTP.Lucu.Abortion
import Network.HTTP.Lucu.Authorization
import Network.HTTP.Lucu.Config
import Network.HTTP.Lucu.ETag
import Network.HTTP.Lucu.Httpd
import Network.HTTP.Lucu.MIMEType
import Network.HTTP.Lucu.Resource hiding (driftTo)
import Network.HTTP.Lucu.Resource.Tree
import Network.HTTP.Lucu.Response
import Network.HTTP.Lucu.StaticFile