packages feed

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