module URI.ByteString.Aeson () where
import Data.Aeson
import qualified Data.ByteString as BS
import URI.ByteString
import Data.Text.Encoding
import Control.Monad
class ParseJSONURI a where
parseJSONURI :: BS.ByteString -> Either URIParseError (URIRef a)
instance ParseJSONURI Absolute where
parseJSONURI = parseURI laxURIParserOptions
instance ParseJSONURI Relative where
parseJSONURI = parseRelativeRef laxURIParserOptions
instance ParseJSONURI a => FromJSON (URIRef a) where
parseJSON = parseJSON >=> either (fail . show) pure . parseJSONURI . encodeUtf8
instance ToJSON (URIRef f) where
toJSON = toJSON . decodeUtf8 . serializeURIRef'