prolude-0.0.0.14: Prolude/Uri.hs
module Prolude.Uri
( -- $conversions
-- * Type alias
Uri
-- * Functions
, 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
{- $conversions
+---------+-------------+-------------+
| From/To | Uri | String |
+---------+-------------+-------------+
| Uri | - | uriToString |
+---------+-------------+-------------+
| String | stringToUri | - |
+---------+-------------+-------------+
+---------+-----------+-----------+
| From/To | Uri | Text |
+---------+-----------+-----------+
| Uri | - | uriToText |
+---------+-----------+-----------+
| Text | textToUri | - |
+---------+-----------+-----------+
-}
type Uri = URI.URI
stringToUri :: String.String -> Either.Either String.String URI.URI
stringToUri string = case URI.parseURI string of
Nothing -> Left $ "invalid URI: " <> show string
Just uri -> Right uri
textToUri :: Text.Text -> Either.Either String.String URI.URI
textToUri = stringToUri . Text.textToString
uriToString :: URI.URI -> String.String
uriToString uri = URI.uriToString Core.identity uri ""
uriToText :: URI.URI -> Text.Text
uriToText = Text.stringToText . uriToString