module Attoparsec.Data.Explicit
(
char,
text,
utf8Bytes,
bool,
signedIntegral,
unsignedIntegral,
A.double,
A.scientific,
string,
uuid,
D.show,
B.timeOfDayInISO8601,
B.dayInISO8601,
B.timeZoneInISO8601,
B.utcTimeInISO8601,
B.diffTime,
B.nominalDiffTime,
)
where
import Attoparsec.Data.Prelude hiding (bool)
import qualified Data.Attoparsec.Text as A
import qualified Attoparsec.Time.Text as B
import qualified Data.Text.Encoding as C
import qualified Attoparsec.Data.Parsers as D
import qualified Data.UUID as Uuid
char :: A.Parser Char
char :: Parser Char
char =
Parser Char
A.anyChar
text :: A.Parser Text
text :: Parser Text
text =
Parser Text
A.takeText
utf8Bytes :: A.Parser ByteString
utf8Bytes :: Parser ByteString
utf8Bytes =
Text -> ByteString
C.encodeUtf8 (Text -> ByteString) -> Parser Text -> Parser ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text
A.takeText
bool :: A.Parser Bool
bool :: Parser Bool
bool =
Parser Char
A.anyChar Parser Char -> (Char -> Parser Bool) -> Parser Bool
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Char
'0' -> Bool -> Parser Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
False
Char
'1' -> Bool -> Parser Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
Char
'f' -> Text -> Parser Text
A.asciiCI Text
"alse" Parser Text -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
False Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
Char
'F' -> Text -> Parser Text
A.asciiCI Text
"alse" Parser Text -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
False Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
Char
't' -> Text -> Parser Text
A.asciiCI Text
"rue" Parser Text -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
Char
'T' -> Text -> Parser Text
A.asciiCI Text
"rue" Parser Text -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
Char
'n' -> (Char -> Bool) -> Parser Char
A.satisfy (String -> Char -> Bool
A.inClass String
"oO") Parser Char -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
False Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
Char
'N' -> (Char -> Bool) -> Parser Char
A.satisfy (String -> Char -> Bool
A.inClass String
"oO") Parser Char -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
False Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
Char
'y' -> Text -> Parser Text
A.asciiCI Text
"es" Parser Text -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
Char
'Y' -> Text -> Parser Text
A.asciiCI Text
"es" Parser Text -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True Parser Bool -> Parser Bool -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
Char
_ -> Parser Bool
forall (f :: * -> *) a. Alternative f => f a
empty
signedIntegral :: Integral a => A.Parser a
signedIntegral :: Parser a
signedIntegral =
Parser a -> Parser a
forall a. Num a => Parser a -> Parser a
A.signed Parser a
forall a. Integral a => Parser a
A.decimal
unsignedIntegral :: Integral a => A.Parser a
unsignedIntegral :: Parser a
unsignedIntegral =
Parser a
forall a. Integral a => Parser a
A.decimal
string :: A.Parser String
string :: Parser String
string =
Parser Char -> Parser String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Char
A.anyChar
uuid :: A.Parser UUID
uuid :: Parser UUID
uuid = do
Text
text <- Int -> Parser Text
A.take Int
36
case Text -> Maybe UUID
Uuid.fromText Text
text of
Just UUID
uuid -> UUID -> Parser UUID
forall (m :: * -> *) a. Monad m => a -> m a
return UUID
uuid
Maybe UUID
Nothing -> String -> Parser UUID
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> ShowS
showString String
"Unparsable UUID: " (Text -> String
forall a. Show a => a -> String
show Text
text))