module Iri.Data.Functions
where
import Iri.Prelude
import Iri.Data.Types
httpIriFromIri :: Iri -> Either Text HttpIri
httpIriFromIri (Iri (Scheme scheme) hierarchy query fragment) =
do
security <- case scheme of
"http" -> Right (Security False)
"https" -> Right (Security True)
_ -> Left ("Not an HTTP scheme: " <> (fromString . show) scheme)
case hierarchy of
AuthorisedHierarchy (Authority userInfo host port) path -> case userInfo of
MissingUserInfo -> Right (HttpIri security host port path query fragment)
PresentUserInfo (User user) _ -> Left ("User Info is present")
_ -> Left ("Not an authorised hierarchy")
iriFromHttpIri :: HttpIri -> Iri
iriFromHttpIri (HttpIri (Security secure) host port path query fragment) =
Iri scheme hierarchy query fragment
where
scheme =
Scheme (if secure then "https" else "http")
hierarchy =
AuthorisedHierarchy (Authority MissingUserInfo host port) path