module Data.Connect.OrphanInstances where

import           Control.Monad (mzero)
import           Data.Aeson
import qualified Data.Text     as T
import qualified Network.URI   as NU

instance FromJSON NU.URI where
   parseJSON :: Value -> Parser URI
parseJSON (String Text
uriString) = Parser URI -> (URI -> Parser URI) -> Maybe URI -> Parser URI
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Parser URI
forall (m :: * -> *) a. MonadPlus m => m a
mzero URI -> Parser URI
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe URI
NU.parseURI (String -> Maybe URI) -> (Text -> String) -> Text -> Maybe URI
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> Maybe URI) -> Text -> Maybe URI
forall a b. (a -> b) -> a -> b
$ Text
uriString)
   parseJSON Value
_ = Parser URI
forall (m :: * -> *) a. MonadPlus m => m a
mzero

instance ToJSON NU.URI where
   toJSON :: URI -> Value
toJSON = Text -> Value
String (Text -> Value) -> (URI -> Text) -> URI -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> (URI -> String) -> URI -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. URI -> String
forall a. Show a => a -> String
show