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

module TextBuilderDev.Domains.StrictTextBuilder where

#if MIN_VERSION_text(2,1,2)

import Data.Text.Internal.StrictBuilder
import qualified TextBuilderCore as Core
import TextBuilderDev.Isomorphic
import TextBuilderDev.Prelude

instance Isomorphic StrictTextBuilder where
  {-# INLINE from #-}
  from :: StrictTextBuilder -> TextBuilder
from (StrictTextBuilder Int
size forall s. MArray s -> Int -> ST s ()
write) =
    Int -> (forall s. MArray s -> Int -> ST s Int) -> TextBuilder
Core.TextBuilder
      Int
size
      ( \MArray s
array Int
offset ->
          MArray s -> Int -> ST s ()
forall s. MArray s -> Int -> ST s ()
write MArray s
array Int
offset ST s () -> Int -> ST s Int
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Int
offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
size
      )
  {-# INLINE to #-}
  to :: TextBuilder -> StrictTextBuilder
to (Core.TextBuilder Int
size forall s. MArray s -> Int -> ST s Int
write) =
    Int -> (forall s. MArray s -> Int -> ST s ()) -> StrictTextBuilder
StrictTextBuilder
      Int
size
      ( \MArray s
array Int
offset ->
          MArray s -> Int -> ST s Int
forall s. MArray s -> Int -> ST s Int
write MArray s
array Int
offset ST s Int -> () -> ST s ()
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ()
      )

#endif