module Network.YAML.Dispatcher where
import qualified Data.Map as M
import Data.Object.Yaml
import Data.Convertible.Base
import qualified Data.ByteString.Char8 as BS
import Network.YAML.Base
import Network.YAML.Instances
import Network.YAML.Server
type Worker = YamlObject -> IO YamlObject
type Rules = M.Map BS.ByteString Worker
mkRules :: [(BS.ByteString,Worker)] -> Rules
mkRules pairs = M.fromList pairs
dispatch :: Rules -> Worker
dispatch rules = \obj ->
let call :: Call
call = cs obj
in case M.lookup (methodName call) rules of
Nothing -> fail $ "Unknown method: " ++ (BS.unpack $ methodName call)
Just fn -> fn (args call)
dispatcher :: Int -> Rules -> IO ()
dispatcher port rules = server port (dispatch rules)