{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP               #-}
{-# LANGUAGE TupleSections     #-}
{-# OPTIONS -fno-warn-orphans  #-}
module Dixi.Forms where

import Servant.API
import Text.Read

#ifdef OLDBASE
import Control.Applicative
#endif

import qualified Data.Text as T

import Dixi.API

instance FromFormUrlEncoded NewBody where
  fromFormUrlEncoded x = NB <$> maybe (Left "error") Right (lookup "content" x) <*> pure (lookup "comment" x)
instance ToFormUrlEncoded NewBody where
  toFormUrlEncoded (NB t c) = ("content", T.pack $ show t) : maybe [] (pure . ("comment",)) c
instance ToFormUrlEncoded RevReq where
  toFormUrlEncoded (DR v1 v2 c) = [("from", T.pack $ show v1), ("to", T.pack $ show v2)] ++ maybe [] (pure . ("comment",)) c
instance FromFormUrlEncoded RevReq where
  fromFormUrlEncoded x = DR <$> maybe (Left "error") Right (lookup "from" x >>= readMaybe . T.unpack)
                            <*> maybe (Left "error") Right (lookup "to" x   >>= readMaybe . T.unpack)
                            <*> pure (lookup "comment" x)