module Prolude.Uri
(
Uri
, stringToUri
, textToUri
, uriToString
, uriToText
)
where
import qualified Data.Either as Either
import qualified Data.String as String
import qualified Data.Text as Text
import qualified Network.URI as URI
import qualified Prolude.Core as Core
import qualified Prolude.Text as Text
type Uri = URI.URI
stringToUri :: String.String -> Either.Either String.String URI.URI
stringToUri :: String -> Either String URI
stringToUri String
string = case String -> Maybe URI
URI.parseURI String
string of
Maybe URI
Nothing -> forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ String
"invalid URI: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show String
string
Just URI
uri -> forall a b. b -> Either a b
Right URI
uri
textToUri :: Text.Text -> Either.Either String.String URI.URI
textToUri :: Text -> Either String URI
textToUri = String -> Either String URI
stringToUri forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
Text.textToString
uriToString :: URI.URI -> String.String
uriToString :: URI -> String
uriToString URI
uri = (String -> String) -> URI -> String -> String
URI.uriToString forall a. a -> a
Core.identity URI
uri String
""
uriToText :: URI.URI -> Text.Text
uriToText :: URI -> Text
uriToText = String -> Text
Text.stringToText forall b c a. (b -> c) -> (a -> b) -> a -> c
. URI -> String
uriToString