graphql-engine/server/src-lib/Hasura/RemoteSchema/Metadata/Permission.hs
Tom Harding f8002894c9 Remove some TemplateHaskell from Hasura.RemoteSchema
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/9689
GitOrigin-RevId: 6ac85d35faa211713c58e695efc996b9f930baf1
2023-06-28 12:28:56 +00:00

67 lines
2.3 KiB
Haskell

module Hasura.RemoteSchema.Metadata.Permission
( RemoteSchemaPermissionDefinition (..),
RemoteSchemaPermissionMetadata (..),
)
where
import Autodocodec (HasCodec (codec), object, optionalField', requiredField', requiredFieldWith, (.=))
import Autodocodec.Extended (graphQLSchemaDocumentCodec)
import Data.Aeson qualified as J
import Hasura.Prelude
import Hasura.RQL.Types.Roles (RoleName)
import Language.GraphQL.Draft.Printer qualified as G
import Language.GraphQL.Draft.Syntax qualified as G
import Text.Builder qualified as TB
newtype RemoteSchemaPermissionDefinition = RemoteSchemaPermissionDefinition
{ _rspdSchema :: G.SchemaDocument
}
deriving (Show, Eq, Generic)
instance NFData RemoteSchemaPermissionDefinition
instance Hashable RemoteSchemaPermissionDefinition
instance HasCodec RemoteSchemaPermissionDefinition where
codec =
object "RemoteSchemaPermissionDefinition"
$ RemoteSchemaPermissionDefinition
<$> requiredFieldWith
"schema"
graphQLSchemaDocumentCodec
"GraphQL schema document, e.g. the content of schema.gql"
.= _rspdSchema
instance J.FromJSON RemoteSchemaPermissionDefinition where
parseJSON = J.withObject "RemoteSchemaPermissionDefinition" $ \obj -> do
fmap RemoteSchemaPermissionDefinition $ obj J..: "schema"
instance J.ToJSON RemoteSchemaPermissionDefinition where
toJSON (RemoteSchemaPermissionDefinition schema) =
J.object $ ["schema" J..= J.String (TB.run . G.schemaDocument $ schema)]
data RemoteSchemaPermissionMetadata = RemoteSchemaPermissionMetadata
{ _rspmRole :: RoleName,
_rspmDefinition :: RemoteSchemaPermissionDefinition,
_rspmComment :: Maybe Text
}
deriving (Show, Eq, Generic)
instance HasCodec RemoteSchemaPermissionMetadata where
codec =
object "RemoteSchemaPermissionMetadata"
$ RemoteSchemaPermissionMetadata
<$> requiredField' "role"
.= _rspmRole
<*> requiredField' "definition"
.= _rspmDefinition
<*> optionalField' "comment"
.= _rspmComment
instance J.FromJSON RemoteSchemaPermissionMetadata where
parseJSON = J.genericParseJSON hasuraJSON {J.omitNothingFields = True}
instance J.ToJSON RemoteSchemaPermissionMetadata where
toJSON = J.genericToJSON hasuraJSON {J.omitNothingFields = True}
toEncoding = J.genericToEncoding hasuraJSON {J.omitNothingFields = True}