module AirGQL.Types.OutObjectType (
  OutObjectType (OutObjectType, name, descriptionMb, interfaceTypes, fields),
  outObjectTypeToObjectType,
)
where

import Protolude (Maybe, Text, (&))

import Data.HashMap.Strict (HashMap)
import Language.GraphQL.Type (InterfaceType)
import Language.GraphQL.Type.Out qualified as Out


data OutObjectType m = OutObjectType
  { forall (m :: * -> *). OutObjectType m -> Text
name :: Text
  , forall (m :: * -> *). OutObjectType m -> Maybe Text
descriptionMb :: Maybe Text
  , forall (m :: * -> *). OutObjectType m -> [InterfaceType m]
interfaceTypes :: [InterfaceType m]
  , forall (m :: * -> *). OutObjectType m -> HashMap Text (Resolver m)
fields :: HashMap Text (Out.Resolver m)
  }


outObjectTypeToObjectType :: OutObjectType m -> Out.ObjectType m
outObjectTypeToObjectType :: forall (m :: * -> *). OutObjectType m -> ObjectType m
outObjectTypeToObjectType OutObjectType m
objectType =
  Text
-> Maybe Text
-> [InterfaceType m]
-> HashMap Text (Resolver m)
-> ObjectType m
forall (m :: * -> *).
Text
-> Maybe Text
-> [InterfaceType m]
-> HashMap Text (Resolver m)
-> ObjectType m
Out.ObjectType
    (OutObjectType m
objectType OutObjectType m -> (OutObjectType m -> Text) -> Text
forall a b. a -> (a -> b) -> b
& OutObjectType m -> Text
forall (m :: * -> *). OutObjectType m -> Text
name)
    (OutObjectType m
objectType OutObjectType m -> (OutObjectType m -> Maybe Text) -> Maybe Text
forall a b. a -> (a -> b) -> b
& (OutObjectType m -> Maybe Text
forall (m :: * -> *). OutObjectType m -> Maybe Text
descriptionMb :: OutObjectType m -> Maybe Text))
    (OutObjectType m
objectType OutObjectType m
-> (OutObjectType m -> [InterfaceType m]) -> [InterfaceType m]
forall a b. a -> (a -> b) -> b
& OutObjectType m -> [InterfaceType m]
forall (m :: * -> *). OutObjectType m -> [InterfaceType m]
interfaceTypes)
    (OutObjectType m
objectType OutObjectType m
-> (OutObjectType m -> HashMap Text (Resolver m))
-> HashMap Text (Resolver m)
forall a b. a -> (a -> b) -> b
& OutObjectType m -> HashMap Text (Resolver m)
forall (m :: * -> *). OutObjectType m -> HashMap Text (Resolver m)
fields)