{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Rendering.RenderGQL
( RenderGQL (..),
renderObject,
renderIndent,
)
where
import Data.Semigroup ((<>))
import Data.Text
( Text,
intercalate,
pack,
)
type Rendering = Text
class RenderGQL a where
render :: a -> Rendering
instance RenderGQL Int where
render = pack . show
instance RenderGQL Float where
render = pack . show
instance RenderGQL Text where
render = pack . show
instance RenderGQL Bool where
render True = "true"
render False = "false"
renderIndent :: Rendering
renderIndent = " "
renderObject :: (a -> Rendering) -> [a] -> Rendering
renderObject f list =
" { \n " <> intercalate ("\n" <> renderIndent) (map f list) <> "\n}"