12345678910111213141516171819202122232425262728293031323334 |
- {-# LANGUAGE OverloadedStrings #-}
- module Data.SMTP.Parser.URI (parseURI) where
- import Data.Attoparsec.ByteString.Char8
- import qualified Data.Attoparsec.ByteString.Char8 as A
- import Data.SMTP.Types.URI
- import Data.SMTP.Account
- import Control.Applicative ((<|>))
- import qualified Data.Char as C
- import Text.StringConvert
- parseURI :: Parser URI
- parseURI = do
- stringCI "fCMTP://"
- a <- parseAccount
- p <- parsePath
- (do
- stringCI "#"
- rev <- parseRevision
- return $ URI a p (Just rev)
- ) <|> return (URI a p Nothing)
- parsePath :: Parser Path
- parsePath = (Path . s) <$> A.takeWhile isPathChar
- where
- isPathChar :: Char -> Bool
- isPathChar c = C.isAlphaNum c || elem c ("_-=[]{}().:%/" :: String)
- parseRevision :: Parser Revision
- parseRevision = (Revision . s) <$> A.takeWhile isRevisionChar
- where
- isRevisionChar :: Char -> Bool
- isRevisionChar c = C.isAlphaNum c || elem c ("+-/_=." :: String)
|