{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module LawfulConversions.Relations.StrictTextBuilderAndString where

#if MIN_VERSION_text(2,1,2)

import qualified Data.Text.Encoding
import LawfulConversions.Classes
import LawfulConversions.Relations.StringAndText ()
import LawfulConversions.Prelude

instance IsSome String Data.Text.Encoding.StrictTextBuilder where
  to = to . Data.Text.Encoding.strictBuilderToText
  maybeFrom = fmap Data.Text.Encoding.textToStrictBuilder . maybeFrom

instance IsMany String Data.Text.Encoding.StrictTextBuilder where
  from =  Data.Text.Encoding.textToStrictBuilder . from

#elif MIN_VERSION_text(2,0,2)

import qualified Data.Text.Encoding
import LawfulConversions.Classes
import LawfulConversions.Relations.StringAndText ()
import LawfulConversions.Prelude

instance IsSome String Data.Text.Encoding.StrictBuilder where
  to :: StrictBuilder -> String
to = Text -> String
forall a b. IsSome a b => b -> a
to (Text -> String)
-> (StrictBuilder -> Text) -> StrictBuilder -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. StrictBuilder -> Text
Data.Text.Encoding.strictBuilderToText
  maybeFrom :: String -> Maybe StrictBuilder
maybeFrom = (Text -> StrictBuilder) -> Maybe Text -> Maybe StrictBuilder
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> StrictBuilder
Data.Text.Encoding.textToStrictBuilder (Maybe Text -> Maybe StrictBuilder)
-> (String -> Maybe Text) -> String -> Maybe StrictBuilder
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. String -> Maybe Text
forall a b. IsSome a b => a -> Maybe b
maybeFrom

instance IsMany String Data.Text.Encoding.StrictBuilder where
  from :: String -> StrictBuilder
from =  Text -> StrictBuilder
Data.Text.Encoding.textToStrictBuilder (Text -> StrictBuilder)
-> (String -> Text) -> String -> StrictBuilder
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. String -> Text
forall a b. IsMany a b => a -> b
from

#endif