{- | See rfc2396 for more info. -}

{-# LANGUAGE TemplateHaskell #-}
module Network.Protocol.Uri (

  -- * URI datatype.

    Scheme
  , RegName
  , Port
  , Query
  , Fragment
  , Hash
  , UserInfo
  , PathSegment
  , Parameters

  , Domain (Domain)
  , IPv4 (IPv4)
  , Path (Path)
  , Host (Hostname, RegName, IP)
  , Authority (Authority)
  , Uri (Uri)

  -- * Accessing parts of URIs.

  , relative
  , scheme
  , userinfo
  , authority
  , host
  , domain
  , ipv4
  , regname
  , port
  , path
  , segments
  , query
  , fragment

  -- * More advanced labels and functions.

  , pathAndQuery
  , queryParams
  , params
  , extension

  , remap

  -- * Encoding/decoding URI encoded strings.

  , encode
  , decode
  , encoded

  -- * Creating empty URIs.

  , mkUri
  , mkScheme
  , mkPath
  , mkAuthority
  , mkQuery
  , mkFragment
  , mkUserinfo
  , mkHost
  , mkPort

  -- * Parsing URIs.

  , toUri
  , parseUri
  , parseAbsoluteUri
  , parseAuthority
  , parsePath
  , parseHost

  -- * Filename related utilities.

  , mimetype
  , normalize
  , jail
  , (/+)

  ) where

import Network.Protocol.Uri.Data
import Network.Protocol.Uri.Encode
import Network.Protocol.Uri.Parser
import Network.Protocol.Uri.Path
import Network.Protocol.Uri.Printer ()
import Network.Protocol.Uri.Query
import Network.Protocol.Uri.Remap