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 qualified Data.Map as M
import Data.List.Utils (join)
data Submit = Submit { table :: Table
, user :: String
, factualId :: Maybe String
, values :: M.Map String String
, reference :: Maybe String
, comment :: Maybe String
} deriving (Eq, Show)
instance Write Submit where
path submit = pathString submit
params _ = M.empty
body submit = M.fromList [ ("user", user submit)
, ("values", valuesString (values submit))
, ("reference", maybeString (reference submit))
, ("comment", maybeString (reference 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) ++ "\""
maybeString :: Maybe String -> String
maybeString (Just s) = s
maybeString Nothing = ""