module Data.Factual.Write.Insert
(
Insert(..)
, 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 Insert = Insert { table :: Table
, user :: String
, factualId :: Maybe String
, values :: M.Map String String
} deriving (Eq, Show)
instance Write Insert where
path insert = pathString insert
params _ = M.empty
body insert = M.fromList [ ("user", user insert)
, ("values", valuesString (values insert)) ]
pathString :: Insert -> String
pathString insert
| factualId insert == Nothing = (show $ table insert) ++ "/insert"
| otherwise = (show $ table insert)
++ "/"
++ (fromJust $ factualId insert)
++ "/insert"
valuesString :: M.Map String String -> String
valuesString values = "{" ++ join "," (map valueString $ M.keys values) ++ "}"
where valueString key = "\"" ++ key ++ "\":\"" ++
(fromJust $ M.lookup key values) ++ "\""