]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - examples/HelloWorld.hs
hlint
[Lucu.git] / examples / HelloWorld.hs
index f3a36219fbd69fda04fefef40648dc1d5ca98b63..2d240e8bb8bb0b751cdaf1d56a76c24b159dd82f 100644 (file)
@@ -1,46 +1,48 @@
-import Control.Monad.Trans
-import Data.Maybe
+{-# LANGUAGE
+    OverloadedStrings
+  , QuasiQuotes
+  , UnicodeSyntax
+  #-}
+import Control.Applicative
+import Control.Monad.Unicode
+import qualified Data.ByteString.Lazy.Char8 as Lazy
+import qualified Data.Collections as C
+import Data.Monoid.Unicode
 import Network
-import Network.HTTP.Lucu.Config
-import Network.HTTP.Lucu.ETag
-import Network.HTTP.Lucu.Httpd
-import Network.HTTP.Lucu.MIMEType
-import Network.HTTP.Lucu.MIMEType.Guess
-import Network.HTTP.Lucu.Parser
-import Network.HTTP.Lucu.Parser.Http
-import Network.HTTP.Lucu.Resource
-import Network.HTTP.Lucu.Resource.Tree
-import Network.HTTP.Lucu.Response
-import Network.URI
-import System.Posix.Signals
-import System.Time
+import Network.HTTP.Lucu
+import Prelude.Unicode
 
-main :: IO ()
-main = let config    = defaultConfig { cnfServerPort = PortNumber 9999 }
-           resources = mkResTree [ ([], helloWorld) ]
+main ∷ IO ()
+main = let config    = defaultConfig { cnfServerPort = "9999" }
+           mapper    = resourceMap resources ⊕ resourceMap fallbacks
+           resources ∷ ResourceTree
+           resources = C.fromList
+                       [ ([]          , nonGreedy helloWorld)
+                       , (["urandom" ], nonGreedy $ staticFile "/dev/urandom")
+                       , (["inc"     ], greedy    $ staticDir  "/usr/include")
+                       , (["inc", "t"], nonGreedy $ staticFile "/usr/include/time.h")
+                       ]
+           fallbacks ∷ Path → Maybe (Path, Resource)
+           fallbacks path
+               | path ≡ ["hello"] = Just (path, helloWorld)
+               | otherwise        = Nothing
        in
-         do installHandler sigPIPE Ignore Nothing
-            runHttpd config resources
+         do putStrLn "Access http://localhost:9999/ with your browser."
+            withSocketsDo $ runHttpd config mapper
 
-
-helloWorld :: ResourceDef
-helloWorld
-    = ResourceDef {
-        resUsesNativeThread = False
-      , resIsGreedy         = False
-      , resGet
-          = Just $ do time <- liftIO $ getClockTime
-                      foundEntity (strongETag "abcde") time
-                      setContentType $ "text" +/+ "hello"
-                      outputChunk "Hello, "
-                      outputChunk "World!\n"
-      , resHead   = Nothing
-      , resPost
-          = Just $ do str1 <- inputChunk 3
-                      str2 <- inputChunk 3
-                      str3 <- inputChunk 3
-                      setContentType $ "text" +/+ "hello"
-                      output ("[" ++ str1 ++ " - " ++ str2 ++ "#" ++ str3 ++ "]")
-      , resPut    = Nothing
-      , resDelete = Nothing
-      }
\ No newline at end of file
+helloWorld ∷ Resource
+helloWorld = C.fromList
+             [ ( GET
+               , do setContentType [mimeType| text/hello |]
+                    putChunk "Hello, "
+                    putChunk "World!\n"
+                    putChunks =≪ Lazy.pack <$> getRemoteAddr'
+               )
+             , ( POST
+               , do str1 ← getChunk 3
+                    str2 ← getChunk 3
+                    str3 ← getChunk 3
+                    setContentType [mimeType| text/hello |]
+                    putChunks $ Lazy.fromChunks ["[", str1, " - ", str2, "#", str3, "]"]
+               )
+             ]