{-# 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 (Semigroup, Monoid)

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

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

toAsciiBuilder :: Ascii -> AsciiBuilder
toAsciiBuilder (Ascii bs) = AsciiBuilder $ Blaze.fromByteString bs

fromAsciiBuilder :: AsciiBuilder -> Ascii
fromAsciiBuilder (AsciiBuilder b) = Ascii $ Blaze.toByteString b