{-# language ConstraintKinds #-} {-# language OverloadedStrings #-} {-# language TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Trasa.Form ( reform , reformQP , reformPost , liftParser , TrasaForm , TrasaSimpleForm , FormError(..) ) where import Control.Monad.Except import Control.Monad.Reader import Data.Text (Text) import Ditto.Backend import Ditto.Core hiding (view) import Ditto.Result import Lucid import Trasa.Core hiding (optional) import Trasa.Server import Trasa.Url import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL import qualified Data.HashMap.Strict as HM import qualified Data.Text as T import qualified Data.Text.Lazy as TL import qualified Web.FormUrlEncoded as HTTP liftParser :: (Text -> Either Text a) -> (QueryParam -> Either Text a) liftParser f q = case q of QueryParamSingle x -> f x QueryParamList [x] -> f x QueryParamFlag -> Left "Unexpected query flag" QueryParamList [] -> Left "Unexpect empty query list" QueryParamList (_:_:_) -> Left "Unexpected query string list" tshow :: Show a => a -> Text tshow = T.pack . show type TrasaSimpleForm a = Form (TrasaT IO) Text Text (Html ()) a type TrasaForm a = Form (TrasaT IO) QueryParam Text (Html ()) a reform :: (MonadIO m, Monoid view) => ([(Text, Text)] -> view -> view) -- ^ wrap raw form html inside a