]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - examples/HelloWorld.hs
HelloWorld works again.
[Lucu.git] / examples / HelloWorld.hs
index f8a4721dca6c5503a31e50715e69e43d0c0c2273..6a732565a78b8c4cba35020df1eda9a8e8fb6d52 100644 (file)
@@ -6,35 +6,42 @@
 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.HTTP.Lucu
+import Prelude.Unicode
 
 main ∷ IO ()
 main = let config    = defaultConfig { cnfServerPort = "9999" }
-           resources = mkResTree
-                       [ ([]         , helloWorld               )
-                       , (["urandom"], staticFile "/dev/urandom")
-                       , (["inc"    ], staticDir "/usr/include" )
-                       ]
-           fallbacks = [ \ path → case path of
-                                     ["hello"] → return $ Just helloWorld
-                                     _         → return Nothing
+           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 putStrLn "Access http://localhost:9999/ with your browser."
-            runHttpd config resources fallbacks
+            runHttpd config mapper
 
-helloWorld ∷ ResourceDef
-helloWorld
-    = emptyResource {
-        resGet
-          = Just $ do setContentType [mimeType| text/hello |]
-                      putChunk "Hello, "
-                      putChunk "World!\n"
-                      putChunks =≪ Lazy.pack <$> getRemoteAddr'
-      , resPost
-          = Just $ do str1 ← getChunk 3
-                      str2 ← getChunk 3
-                      str3 ← getChunk 3
-                      setContentType [mimeType| text/hello |]
-                      putChunks $ Lazy.fromChunks ["[", str1, " - ", str2, "#", str3, "]"]
-      }
+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, "]"]
+               )
+             ]