module Data.Factual.Write.Flag
(
Flag(..)
, Problem(..)
, module Data.Factual.Shared.Table
) where
import Data.Factual.Write
import Data.Factual.Shared.Table
import Data.Maybe (fromJust)
import Data.Factual.Utils
data Problem = Duplicate
| Nonexistent
| Inaccurate
| Inappropriate
| Spam
| Other
deriving (Eq, Show)
data Flag = Flag { table :: Table
, factualId :: String
, problem :: Problem
, user :: String
, comment :: Maybe String
, debug :: Bool
, reference :: Maybe String
} deriving (Eq, Show)
instance Write Flag where
path flag = (show $ table flag) ++ "/" ++ (factualId flag) ++ "/flag"
body flag = "problem=" ++ (show $ problem flag) ++ "&" ++
"user=" ++ (user flag) ++ "&" ++
joinAndFilter [ commentString flag
, debugString flag
, referenceString flag ]
commentString :: Flag -> String
commentString flag
| comment flag == Nothing = ""
| otherwise = "comment=" ++ (fromJust $ comment flag)
debugString :: Flag -> String
debugString flag
| debug flag == True = "debug=true"
| otherwise = "debug=false"
referenceString :: Flag -> String
referenceString flag
| reference flag == Nothing = ""
| otherwise = "reference=" ++ (fromJust $ reference flag)