---
name: "GraphQL::Schema"
section: "3pm"
platform: "linux"
package: "libgraphql-perl"
version: "0.54-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/GraphQL::Schema"
---

# GraphQL::Schema(3pm)

GraphQL schema object

## NAME

GraphQL::Schema - GraphQL schema object

## SYNOPSIS

```
  use GraphQL::Schema;
  use GraphQL::Type::Object;
  my $schema = GraphQL::Schema->new(
    query => GraphQL::Type::Object->new(
      name => 'Query',
      fields => {
        getObject => {
          type => $interfaceType,
          resolve => sub {
            return {};
          }
        }
      }
    )
  );
```

## DESCRIPTION

Class implementing GraphQL schema.

## ATTRIBUTES

### query

### mutation

### subscription

### types

Defaults to the types returned by "registered" in GraphQL::Plugin::Type. Note that this includes the standard scalar types always loaded by GraphQL::Type::Scalar. If you wish to supply an overriding value for this attribute, bear that in mind.

### directives

## METHODS

### name2type

In this schema, returns a hash-ref mapping all types' names to their type object.

### get\_possible\_types($abstract\_type)

In this schema, get all of either the implementation types (if interface) or possible types (if union) of the `$abstract_type`.

### is\_possible\_type($abstract\_type, $possible\_type)

In this schema, is the given `$possible_type` either an implementation (if interface) or a possibility (if union) of the `$abstract_type`?

### assert\_object\_implements\_interface($type, $iface)

In this schema, does the given `$type` implement interface `$iface`? If not, throw exception.

### from\_ast($ast\[, \\%kind2class\])

Class method. Takes AST (array-ref of hash-refs) made by "parse" in GraphQL::Language::Parser and returns a schema object. Will not be a complete schema since it will have only default resolvers.

If `"\%kind2class"` is given, it will override the default mapping of SDL keywords to Perl classes. This is probably most useful for GraphQL::Type::Object. The default is available as `%GraphQL::Schema::KIND2CLASS`. E.g.

```
  my $schema = GraphQL::Schema->from_ast(
    $doc,
    { %GraphQL::Schema::KIND2CLASS, type => 'GraphQL::Type::Object::DBIC' }
  );
```

Makes available the additional types returned by "registered" in GraphQL::Plugin::Type.

### from\_doc($doc\[, \\%kind2class\])

Class method. Takes text that is a Schema Definition Language (SDL) (aka Interface Definition Language) document and returns a schema object. Will not be a complete schema since it will have only default resolvers.

As of v0.32, this accepts both old-style "meaningful comments" and new-style string values, as field or type descriptions.

If `"\%kind2class"` is given, it will override the default mapping of SDL keywords to Perl classes. This is probably most useful for GraphQL::Type::Object. The default is available as `%GraphQL::Schema::KIND2CLASS`.

### to\_doc($doc)

Returns Schema Definition Language (SDL) document that describes this schema object.

As of v0.32, this produces the new-style descriptions that are string values, rather than old-style "meaningful comments".

As of v0.33, will not return a description of types supplied with the attribute "types". Obviously, by default this includes types returned by "registered" in GraphQL::Plugin::Type.

### name2directive

In this schema, returns a hash-ref mapping all directives' names to their directive object.

## FUNCTIONS

### lookup\_type($typedef, $name2type)

Turns given AST fragment into a type.

If the hash-ref's `"type"` member is a string, will return a type of that name.

If an array-ref, first element must be either `"list"` or `"non_null"`, second will be a recursive AST fragment, which will be passed into a recursive call. The result will then have the modifier method (`"list"` or `"non_null"`) called, and that will be returned.
