module Data.Factual.Write.Submit
(
Submit(..)
, module Data.Factual.Shared.Table
) where
import Data.Factual.Write
import Data.Factual.Shared.Table
import Data.Maybe (fromJust)
import Data.Factual.Utils
import qualified Data.Map as M
data Submit = Submit { table :: Table
, user :: String
, factualId :: Maybe String
, values :: M.Map String String
} deriving (Eq, Show)
instance Write Submit where
path submit = pathString submit
body submit = "user=" ++ (user submit) ++ "&" ++
"values=" ++ valuesString (values submit)
pathString :: Submit -> String
pathString submit
| factualId submit == Nothing = (show $ table submit) ++ "submit"
| otherwise = (show $ table submit) ++
(fromJust $ factualId submit) ++
"/submit"
valuesString :: M.Map String String -> String
valuesString values = "{" ++ join "," (map valueString $ M.keys values) ++ "}"
where valueString key = "\"" ++ key ++ "\":\"" ++
(fromJust $ M.lookup key values) ++ "\""