module HaskellWorks.Data.Json.Standard.Cursor.Internal.BlankedJson
  ( BlankedJson(..)
  , ToBlankedJson(..)
  , toBlankedJsonTyped
  ) where

import HaskellWorks.Data.ByteString
import HaskellWorks.Data.Json.Standard.Cursor.Internal.Blank

import qualified Data.ByteString as BS

newtype BlankedJson = BlankedJson
  { BlankedJson -> [ByteString]
unBlankedJson :: [BS.ByteString]
  } deriving (BlankedJson -> BlankedJson -> Bool
(BlankedJson -> BlankedJson -> Bool)
-> (BlankedJson -> BlankedJson -> Bool) -> Eq BlankedJson
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BlankedJson -> BlankedJson -> Bool
$c/= :: BlankedJson -> BlankedJson -> Bool
== :: BlankedJson -> BlankedJson -> Bool
$c== :: BlankedJson -> BlankedJson -> Bool
Eq, Int -> BlankedJson -> ShowS
[BlankedJson] -> ShowS
BlankedJson -> String
(Int -> BlankedJson -> ShowS)
-> (BlankedJson -> String)
-> ([BlankedJson] -> ShowS)
-> Show BlankedJson
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlankedJson] -> ShowS
$cshowList :: [BlankedJson] -> ShowS
show :: BlankedJson -> String
$cshow :: BlankedJson -> String
showsPrec :: Int -> BlankedJson -> ShowS
$cshowsPrec :: Int -> BlankedJson -> ShowS
Show)

class ToBlankedJson a where
  toBlankedJson :: a -> [BS.ByteString]

instance ToBlankedJson BS.ByteString where
  toBlankedJson :: ByteString -> [ByteString]
toBlankedJson ByteString
bs = [ByteString] -> [ByteString]
blankJson (Int -> ByteString -> [ByteString]
chunkedBy Int
4096 ByteString
bs)

toBlankedJsonTyped :: ToBlankedJson a => a -> BlankedJson
toBlankedJsonTyped :: a -> BlankedJson
toBlankedJsonTyped = [ByteString] -> BlankedJson
BlankedJson ([ByteString] -> BlankedJson)
-> (a -> [ByteString]) -> a -> BlankedJson
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [ByteString]
forall a. ToBlankedJson a => a -> [ByteString]
toBlankedJson