iri-0.5: library/Iri/Parsing/Text.hs
module Iri.Parsing.Text
( iri,
httpIri,
hierarchy,
scheme,
host,
regName,
domainLabel,
port,
path,
pathSegment,
query,
fragment,
)
where
import Data.Attoparsec.Text qualified as B
import Iri.Data
import Iri.Parsing.Attoparsec.Text qualified as A
import Iri.Prelude
fromParser :: B.Parser a -> Text -> Either Text a
fromParser parser =
either (Left . fromString) Right
. B.parseOnly (parser <* B.endOfInput)
-- |
-- Parser of a well-formed IRI conforming to the RFC3987 standard into 'Iri'.
-- Performs URL-decoding.
iri :: Text -> Either Text Iri
iri = fromParser A.iri
-- |
-- Same as 'iri', but optimized specifially for the case of HTTP IRIs.
httpIri :: Text -> Either Text HttpIri
httpIri = fromParser A.httpIri
hierarchy :: Text -> Either Text Hierarchy
hierarchy = fromParser A.hierarchy
scheme :: Text -> Either Text Scheme
scheme = fromParser A.scheme
host :: Text -> Either Text Host
host = fromParser A.host
regName :: Text -> Either Text RegName
regName = fromParser A.regName
domainLabel :: Text -> Either Text DomainLabel
domainLabel = fromParser A.domainLabel
port :: Text -> Either Text Word16
port = fromParser A.port
path :: Text -> Either Text Path
path = fromParser A.path
pathSegment :: Text -> Either Text PathSegment
pathSegment = fromParser A.pathSegment
query :: Text -> Either Text Query
query = fromParser A.query
fragment :: Text -> Either Text Fragment
fragment = fromParser A.fragment