    module Network.OAuth2.Experiment.Utils where

    import Data.Bifunctor
    import Data.ByteString (ByteString)
    import Data.ByteString.Char8 qualified as BS8
    import Data.Map.Strict (Map)
    import Data.Map.Strict qualified as Map
    import Data.Text qualified as T
    import Data.Text.Encoding qualified as T
    import Data.Text.Encoding qualified as TE
    import Data.Text.Lazy qualified as TL
    import URI.ByteString (URI, serializeURIRef')

    tlToBS :: TL.Text -> ByteString
    tlToBS :: Text -> ByteString
    tlToBS = Text -> ByteString
    TE.encodeUtf8 (Text -> ByteString) -> (Text -> Text) -> Text -> ByteString
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Text -> Text
    TL.toStrict

    bs8ToLazyText :: BS8.ByteString -> TL.Text
    bs8ToLazyText :: ByteString -> Text
    bs8ToLazyText = String -> Text
    TL.pack (String -> Text) -> (ByteString -> String) -> ByteString -> Text
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ByteString -> String
    BS8.unpack

    unionMapsToQueryParams :: [Map TL.Text TL.Text] -> [(ByteString, ByteString)]
    unionMapsToQueryParams :: [Map Text Text] -> [(ByteString, ByteString)]
    unionMapsToQueryParams =
      ((Text, Text) -> (ByteString, ByteString))
    -> [(Text, Text)] -> [(ByteString, ByteString)]
    forall a b. (a -> b) -> [a] -> [b]
    map ((Text -> ByteString)
    -> (Text -> ByteString) -> (Text, Text) -> (ByteString, ByteString)
    forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
    forall (p :: * -> * -> *) a b c d.
    Bifunctor p =>
    (a -> b) -> (c -> d) -> p a c -> p b d
    bimap Text -> ByteString
    tlToBS Text -> ByteString
    tlToBS)
        ([(Text, Text)] -> [(ByteString, ByteString)])
    -> ([Map Text Text] -> [(Text, Text)])
    -> [Map Text Text]
    -> [(ByteString, ByteString)]
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Map Text Text -> [(Text, Text)]
    forall k a. Map k a -> [(k, a)]
    Map.toList
        (Map Text Text -> [(Text, Text)])
    -> ([Map Text Text] -> Map Text Text)
    -> [Map Text Text]
    -> [(Text, Text)]
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . [Map Text Text] -> Map Text Text
    forall (f :: * -> *) k a.
    (Foldable f, Ord k) =>
    f (Map k a) -> Map k a
    Map.unions

    uriToText :: URI -> T.Text
    uriToText :: URI -> Text
    uriToText = ByteString -> Text
    T.decodeUtf8 (ByteString -> Text) -> (URI -> ByteString) -> URI -> Text
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . URI -> ByteString
    forall a. URIRef a -> ByteString
    serializeURIRef'