module Iri.Parsing.ByteString
(
uri,
httpUri,
regName,
uriQuery,
)
where
import Iri.Prelude
import Iri.Data
import qualified Iri.Parsing.Attoparsec.ByteString as A
import qualified Data.Attoparsec.ByteString as B
import qualified Data.ByteString as ByteString
parser parser =
either (Left . fromString) Right .
B.parseOnly (parser <* B.endOfInput)
uri :: ByteString -> Either Text Iri
uri =
parser A.uri
httpUri :: ByteString -> Either Text HttpIri
httpUri =
parser A.httpUri
regName :: ByteString -> Either Text RegName
regName =
parser A.regName
uriQuery :: ByteString -> Query
uriQuery x =
case ByteString.break (== 63) x of
(beforeQuestion, questionAndAfterQuestion) -> case ByteString.uncons questionAndAfterQuestion of
Just (_, afterQuestion) -> case ByteString.break (== 35) afterQuestion of
(beforeHash, hashAndAfterHash) -> Query beforeHash
uriFragment :: ByteString -> Fragment
uriFragment = ByteString.break (== 35) >>> snd >>> ByteString.drop 1 >>> Fragment