{-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module URI.ByteString.Extension where import Data.ByteString (ByteString) import Data.String (IsString (..)) import Data.Text (Text) import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Lens.Micro import qualified Data.ByteString.Char8 as C8 import URI.ByteString instance IsString Scheme where fromString :: String -> Scheme fromString = ByteString -> Scheme Scheme forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. IsString a => String -> a fromString instance IsString Host where fromString :: String -> Host fromString = ByteString -> Host Host forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. IsString a => String -> a fromString instance IsString (URIRef Absolute) where fromString :: String -> URIRef Absolute fromString = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (forall a. HasCallStack => String -> a error forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Show a => a -> String show) forall a. a -> a id forall b c a. (b -> c) -> (a -> b) -> a -> c . URIParserOptions -> ByteString -> Either URIParseError (URIRef Absolute) parseURI URIParserOptions strictURIParserOptions forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ByteString C8.pack instance IsString (URIRef Relative) where fromString :: String -> URIRef Relative fromString = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (forall a. HasCallStack => String -> a error forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Show a => a -> String show) forall a. a -> a id forall b c a. (b -> c) -> (a -> b) -> a -> c . URIParserOptions -> ByteString -> Either URIParseError (URIRef Relative) parseRelativeRef URIParserOptions strictURIParserOptions forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ByteString C8.pack fromText :: Text -> Maybe URI fromText :: Text -> Maybe (URIRef Absolute) fromText = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (forall a b. a -> b -> a const forall a. Maybe a Nothing) forall a. a -> Maybe a Just forall b c a. (b -> c) -> (a -> b) -> a -> c . URIParserOptions -> ByteString -> Either URIParseError (URIRef Absolute) parseURI URIParserOptions strictURIParserOptions forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString encodeUtf8 unsafeFromText :: Text -> URI unsafeFromText :: Text -> URIRef Absolute unsafeFromText = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (forall a. HasCallStack => String -> a error forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Show a => a -> String show) forall a. a -> a id forall b c a. (b -> c) -> (a -> b) -> a -> c . URIParserOptions -> ByteString -> Either URIParseError (URIRef Absolute) parseURI URIParserOptions strictURIParserOptions forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString encodeUtf8 toText :: URI -> Text toText :: URIRef Absolute -> Text toText = ByteString -> Text decodeUtf8 forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. URIRef a -> ByteString serializeURIRef' fromRelative :: Scheme -> Host -> RelativeRef -> URI fromRelative :: Scheme -> Host -> URIRef Relative -> URIRef Absolute fromRelative Scheme s Host h = forall a b c. (a -> b -> c) -> b -> a -> c flip forall a. URIRef a -> Host -> URIRef a withHost Host h forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Scheme -> URIRef a -> URIRef Absolute toAbsolute Scheme s withHost :: URIRef a -> Host -> URIRef a withHost :: forall a. URIRef a -> Host -> URIRef a withHost URIRef a u Host h = URIRef a u forall a b. a -> (a -> b) -> b & forall a. Lens' (URIRef a) (Maybe Authority) authorityL forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ forall b a. b -> (a -> b) -> Maybe a -> b maybe (forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Maybe UserInfo -> Host -> Maybe Port -> Authority Authority forall a. Maybe a Nothing Host h forall a. Maybe a Nothing) (\Authority a -> forall a. a -> Maybe a Just forall a b. (a -> b) -> a -> b $ Authority a forall a b. a -> (a -> b) -> b & Lens' Authority Host authorityHostL forall s t a b. ASetter s t a b -> b -> s -> t .~ Host h) withPath :: URIRef a -> ByteString -> URIRef a withPath :: forall a. URIRef a -> ByteString -> URIRef a withPath URIRef a u ByteString p = URIRef a u forall a b. a -> (a -> b) -> b & forall a. Lens' (URIRef a) ByteString pathL forall s t a b. ASetter s t a b -> b -> s -> t .~ ByteString p withQuery :: URIRef a -> [(ByteString, ByteString)] -> URIRef a withQuery :: forall a. URIRef a -> [(ByteString, ByteString)] -> URIRef a withQuery URIRef a u [(ByteString, ByteString)] q = URIRef a u forall a b. a -> (a -> b) -> b & (forall a. Lens' (URIRef a) Query queryL forall b c a. (b -> c) -> (a -> b) -> a -> c . Lens' Query [(ByteString, ByteString)] queryPairsL) forall s t a b. ASetter s t a b -> (a -> b) -> s -> t %~ (forall a. [a] -> [a] -> [a] ++ [(ByteString, ByteString)] q)