{-# LANGUAGE DeriveGeneric #-}
{-|
Module      : Instana.SDK.Internal.URL
Description : Representation of an URL
-}
module Instana.SDK.Internal.URL
  ( URL
  , mkHttp
  , mkHttps
  , mkUrl
  ) where


import           GHC.Generics


data Protocol = HTTP | HTTPS
  deriving (Eq, Generic)


instance Show Protocol where
  show HTTP  = "http://"
  show HTTPS = "https://"


-- |Represents a URL.
data URL = URL
  { protocol :: Protocol
  , host     :: String
  , port     :: Int
  , path     :: String
  } deriving (Eq, Generic)


instance Show URL where
  show url =
    (show $ protocol url)  ++
    (host url) ++ ":" ++
    (show $ port url) ++ "/" ++
    (path url)


-- |Creates a URL.
mkUrl ::
  Protocol
  -> String
  -> Int
  -> String
  -> URL
mkUrl _protocol _host _port _path =
  URL
  { protocol = _protocol
  , host = _host
  , port = _port
  , path = _path
  }


-- |Creates a HTTP URL.
mkHttp ::
  String
  -> Int
  -> String
  -> URL
mkHttp = mkUrl HTTP


-- |Creates a HTTPS URL.
mkHttps ::
  String
  -> Int
  -> String
  -> URL
mkHttps = mkUrl HTTPS