1 module Databrary.HTTP.Form.Data
    2   ( FormData(..)
    3   ) where
    4 
    5 import Control.Applicative ((<|>))
    6 import qualified Data.Aeson as JSON
    7 import qualified Data.ByteString as BS
    8 import qualified Data.Map.Strict as Map
    9 import Network.Wai.Parse (FileInfo)
   10 
   11 data FormData a = FormData
   12   { formDataQuery :: Map.Map BS.ByteString (Maybe BS.ByteString)
   13   , formDataPost :: Map.Map BS.ByteString BS.ByteString
   14   , formDataJSON :: Maybe JSON.Value
   15   , formDataFiles :: Map.Map BS.ByteString (FileInfo a)
   16   }
   17 
   18 instance Monoid (FormData a) where
   19   mempty = FormData mempty mempty Nothing mempty
   20   mappend (FormData q1 p1 j1 f1) (FormData q2 p2 j2 f2) =
   21     FormData (mappend q1 q2) (mappend p1 p2) (j1 <|> j2) (mappend f1 f2)
   22