{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeSynonymInstances #-}
module Data.Morpheus.Rendering.Haskell.RenderHS
( RenderHS(..)
) where
import Data.Semigroup ((<>))
import Data.Morpheus.Types.Internal.Data
class RenderHS a where
render :: a -> Key
renderWrapped :: a -> [WrapperD] -> Key
default renderWrapped :: a -> [WrapperD] -> Key
renderWrapped x wrappers = showGQLWrapper (toGQLWrapper wrappers)
where
showGQLWrapper [] = render x
showGQLWrapper (ListType:xs) = "[" <> showGQLWrapper xs <> "]"
showGQLWrapper (NonNullType:xs) = showGQLWrapper xs <> "!"
instance RenderHS Key where
render = id
instance RenderHS TypeAlias where
render TypeAlias {aliasTyCon, aliasWrappers} = renderWrapped aliasTyCon aliasWrappers
instance RenderHS DataKind where
render (ScalarKind x) = typeName x
render (EnumKind x) = typeName x
render (ObjectKind x) = typeName x
render (UnionKind x) = typeName x