{-# LANGUAGE CPP #-}
module Strelka.RequestBodyParsing.DefaultParser
where
import Strelka.Prelude
import qualified Strelka.RequestBodyParsing.Parser as A
import qualified Attoparsec.Data as B
import qualified Data.Text.Lazy as C
import qualified Data.Text.Lazy.Builder as D
import qualified Text.Builder as E
import qualified Data.ByteString.Lazy as F
import qualified Data.ByteString.Builder as G
import qualified ByteString.TreeBuilder as H
class DefaultParser a where
defaultParser :: A.Parser a
#define INSTANCE(TYPE, FUNCTION) instance DefaultParser TYPE where {{-# INLINE defaultParser #-}; defaultParser = FUNCTION;}
#define TEXT_PARSER_INSTANCE(TYPE) INSTANCE(TYPE, A.parseText B.lenientParser)
INSTANCE(Text, A.text)
INSTANCE(E.Builder, A.textBuilder)
INSTANCE(C.Text, A.lazyText)
INSTANCE(D.Builder, A.lazyTextBuilder)
INSTANCE(ByteString, A.bytes)
INSTANCE(H.Builder, A.bytesBuilder)
INSTANCE(F.ByteString, A.lazyBytes)
INSTANCE(G.Builder, A.lazyBytesBuilder)
TEXT_PARSER_INSTANCE(Char)
TEXT_PARSER_INSTANCE(Bool)
TEXT_PARSER_INSTANCE(Integer)
TEXT_PARSER_INSTANCE(Int)
TEXT_PARSER_INSTANCE(Int8)
TEXT_PARSER_INSTANCE(Int16)
TEXT_PARSER_INSTANCE(Int32)
TEXT_PARSER_INSTANCE(Int64)
TEXT_PARSER_INSTANCE(Word)
TEXT_PARSER_INSTANCE(Word8)
TEXT_PARSER_INSTANCE(Word16)
TEXT_PARSER_INSTANCE(Word32)
TEXT_PARSER_INSTANCE(Word64)
TEXT_PARSER_INSTANCE(Double)
TEXT_PARSER_INSTANCE(Scientific)
TEXT_PARSER_INSTANCE(TimeOfDay)
TEXT_PARSER_INSTANCE(Day)
TEXT_PARSER_INSTANCE(TimeZone)
TEXT_PARSER_INSTANCE(UTCTime)
#undef INSTANCE
#undef TEXT_PARSER_INSTANCE