1 module Rakka.SystemConfig
5 , mkSystemConfig -- private
12 import Control.Arrow.ArrowIO
13 import Control.Monad.Trans
14 import qualified Data.ByteString.Char8 as C8
17 import qualified Network.HTTP.Lucu.Config as LC
21 data SystemConfig = SystemConfig {
22 scLucuConf :: !LC.Config
33 mkSystemConfig :: LC.Config -> SystemConfig
34 mkSystemConfig = SystemConfig
37 getSysConf :: MonadIO m => SystemConfig -> SysConfValue -> m SysConfValue
39 = liftIO $ sysConfDefault sc key -- FIXME
42 getSysConfA :: ArrowIO a => SystemConfig -> SysConfValue -> a b SysConfValue
43 getSysConfA = (arrIO0 .) . getSysConf
47 sysConfPath :: SysConfValue -> FilePath
48 sysConfPath (SiteName _) = "/siteName"
49 sysConfPath (BaseURI _) = "/baseURI"
50 sysConfPath (DefaultPage _) = "/defaultPage"
51 sysConfPath (StyleSheet _) = "/styleSheet"
55 marshalSysConf :: SysConfValue -> String
56 marshalSysConf (SiteName name) = name
57 marshalSysConf (BaseURI uri ) = uriToString id uri ""
58 marshalSysConf (DefaultPage name) = name
59 marshalSysConf (StyleSheet name) = name
63 unmarshalSysConf :: SysConfValue -> String -> SysConfValue
64 unmarshalSysConf (SiteName _) name = SiteName name
65 unmarshalSysConf (BaseURI _) uri = BaseURI $ fromJust $ parseURI uri
66 unmarshalSysConf (DefaultPage _) name = DefaultPage name
67 unmarshalSysConf (StyleSheet _) name = StyleSheet name
70 {- getting default value -}
71 sysConfDefault :: SystemConfig -> SysConfValue -> IO SysConfValue
73 sysConfDefault _ (SiteName _)
74 = return $ SiteName "Rakka"
76 sysConfDefault sc (BaseURI _)
77 = do let conf = scLucuConf sc
78 host = C8.unpack $ LC.cnfServerHost conf
79 port = case LC.cnfServerPort conf of
80 PortNumber num -> fromIntegral num
83 = "http://" ++ host ++
86 else ':' : show port) ++ "/"
88 return $ BaseURI $ fromJust $ parseURI defaultURI
90 sysConfDefault _ (DefaultPage _)
91 = return $ DefaultPage "MainPage"
93 sysConfDefault _ (StyleSheet _)
94 = return $ StyleSheet "StyleSheet/Default"