{-# OPTIONS_GHC -fno-warn-orphans #-}

{-# LANGUAGE OverloadedStrings #-}

{-|
Module      : Network.URI.JSON
Description : URI FromJSON and ToJSON Instances
Copyright   : (c) Alex Brandt, 2017
License     : MIT

URI Instances for FromJSON and ToJSON
-}
module Network.URI.JSON where

import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON), withText)
import Data.Text (unpack)
import Network.URI (parseURIReference, URI, uriToString)

instance FromJSON URI where
  parseJSON = withText "URI" $ maybe (fail "invalid URI") return . parseURIReference . unpack

instance ToJSON URI where
  toJSON u = toJSON $ uriToString id u ""