    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.Encoding qualified as TE
    import Data.Text.Lazy qualified as TL

    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

    mapsToParams :: [Map TL.Text TL.Text] -> [(ByteString, ByteString)]
    mapsToParams :: [Map Text Text] -> [(ByteString, ByteString)]
    mapsToParams =
      ((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