{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module Data.Ascii.Blaze where

import Data.Ascii.ByteString

-- base
import Data.Monoid (Monoid)
import Data.Semigroup (Semigroup)

-- blaze-builder
import qualified Blaze.ByteString.Builder as Blaze

newtype AsciiBuilder = AsciiBuilder (Blaze.Builder)
    deriving (b -> AsciiBuilder -> AsciiBuilder
NonEmpty AsciiBuilder -> AsciiBuilder
AsciiBuilder -> AsciiBuilder -> AsciiBuilder
(AsciiBuilder -> AsciiBuilder -> AsciiBuilder)
-> (NonEmpty AsciiBuilder -> AsciiBuilder)
-> (forall b. Integral b => b -> AsciiBuilder -> AsciiBuilder)
-> Semigroup AsciiBuilder
forall b. Integral b => b -> AsciiBuilder -> AsciiBuilder
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
stimes :: b -> AsciiBuilder -> AsciiBuilder
$cstimes :: forall b. Integral b => b -> AsciiBuilder -> AsciiBuilder
sconcat :: NonEmpty AsciiBuilder -> AsciiBuilder
$csconcat :: NonEmpty AsciiBuilder -> AsciiBuilder
<> :: AsciiBuilder -> AsciiBuilder -> AsciiBuilder
$c<> :: AsciiBuilder -> AsciiBuilder -> AsciiBuilder
Semigroup, Semigroup AsciiBuilder
AsciiBuilder
Semigroup AsciiBuilder
-> AsciiBuilder
-> (AsciiBuilder -> AsciiBuilder -> AsciiBuilder)
-> ([AsciiBuilder] -> AsciiBuilder)
-> Monoid AsciiBuilder
[AsciiBuilder] -> AsciiBuilder
AsciiBuilder -> AsciiBuilder -> AsciiBuilder
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
mconcat :: [AsciiBuilder] -> AsciiBuilder
$cmconcat :: [AsciiBuilder] -> AsciiBuilder
mappend :: AsciiBuilder -> AsciiBuilder -> AsciiBuilder
$cmappend :: AsciiBuilder -> AsciiBuilder -> AsciiBuilder
mempty :: AsciiBuilder
$cmempty :: AsciiBuilder
$cp1Monoid :: Semigroup AsciiBuilder
Monoid)

unsafeFromBuilder :: Blaze.Builder -> AsciiBuilder
unsafeFromBuilder :: Builder -> AsciiBuilder
unsafeFromBuilder = Builder -> AsciiBuilder
AsciiBuilder

toBuilder :: AsciiBuilder -> Blaze.Builder
toBuilder :: AsciiBuilder -> Builder
toBuilder (AsciiBuilder Builder
b) = Builder
b

toAsciiBuilder :: Ascii -> AsciiBuilder
toAsciiBuilder :: Ascii -> AsciiBuilder
toAsciiBuilder (Ascii ByteString
bs) = Builder -> AsciiBuilder
AsciiBuilder (Builder -> AsciiBuilder) -> Builder -> AsciiBuilder
forall a b. (a -> b) -> a -> b
$ ByteString -> Builder
Blaze.fromByteString ByteString
bs

fromAsciiBuilder :: AsciiBuilder -> Ascii
fromAsciiBuilder :: AsciiBuilder -> Ascii
fromAsciiBuilder (AsciiBuilder Builder
b) = ByteString -> Ascii
Ascii (ByteString -> Ascii) -> ByteString -> Ascii
forall a b. (a -> b) -> a -> b
$ Builder -> ByteString
Blaze.toByteString Builder
b