GraphQL server library for Rust
Find a file
Kai Ren cbf16c5a33
Make interfaces great again! (#682)
* Bootstrap

* Upd

* Bootstrap macro

* Revert stuff

* Correct PoC to compile

* Bootstrap #[graphql_interface] expansion

* Bootstrap #[graphql_interface] meta parsing

* Bootstrap #[graphql_interface] very basic code generation [skip ci]

* Upd trait code generation and fix keywords usage [skip ci]

* Expand trait impls [skip ci]

* Tune up objects [skip ci]

* Finally! Complies at least... [skip ci]

* Parse meta for fields and its arguments [skip ci]

- also, refactor and bikeshed new macros code

* Impl filling fields meta and bootstrap field resolution [skip ci]

* Poking with fields resolution [skip ci]

* Solve Rust's teen async HRTB problems [skip ci]

* Start parsing trait methods [skip ci]

* Finish parsing fields from trait methods [skip ci]

* Autodetect trait asyncness and allow to specify it [skip ci]

* Allow to autogenerate trait object alias via attribute

* Support generics in trait definition and asyncify them correctly

* Temporary disable explicit async

* Cover arguments and custom names/descriptions in tests

* Re-enable tests with explicit async and fix the codegen to satisfy it

* Check implementers are registered in schema and vice versa

* Check argument camelCases

* Test argument defaults, and allow Into coercions for them

* Re-enable markers

* Re-enable markers and relax Sized requirement on IsInputType/IsOutputType marker traits

* Revert 'juniper_actix' fmt

* Fix missing marks for object

* Fix subscriptions marks

* Deduce result type correctly via traits

* Final fixes

* Fmt

* Restore marks checking

* Support custom ScalarValue

* Cover deprecations with tests

* Impl dowcasting via methods

* Impl dowcasting via external functions

* Support custom context, vol. 1

* Support custom context, vol. 2

* Cover fallible field with test

* Impl explicit generic ScalarValue, vol.1

* Impl explicit generic ScalarValue, vol.2

* Allow passing executor into methods

* Generating enum, vol.1

* Generating enum, vol.2

* Generating enum, vol.3

* Generating enum, vol.3

* Generating enum, vol.4

* Generating enum, vol.5

* Generating enum, vol.6

* Generating enum, vol.7

* Generating enum, vol.8

* Refactor juniper stuff

* Fix juniper tests, vol.1

* Fix juniper tests, vol.2

* Polish 'juniper' crate changes, vol.1

* Polish 'juniper' crate changes, vol.2

* Remove redundant stuf

* Polishing 'juniper_codegen', vol.1

* Polishing 'juniper_codegen', vol.2

* Polishing 'juniper_codegen', vol.3

* Polishing 'juniper_codegen', vol.4

* Polishing 'juniper_codegen', vol.5

* Polishing 'juniper_codegen', vol.6

* Polishing 'juniper_codegen', vol.7

* Polishing 'juniper_codegen', vol.8

* Polishing 'juniper_codegen', vol.9

* Fix other crates tests and make Clippy happier

* Fix examples

* Add codegen failure tests, vol. 1

* Add codegen failure tests, vol. 2

* Add codegen failure tests, vol.3

* Fix codegen failure tests accordingly to latest nightly Rust

* Fix codegen when interface has no implementers

* Fix warnings in book tests

* Describing new interfaces in Book, vol.1

Co-authored-by: Christian Legnitto <LegNeato@users.noreply.github.com>
2020-10-05 21:21:01 -10:00
.github Use github action to download cargo-make (#594) 2020-03-30 20:03:44 -07:00
_build ci: Fix used rust version 2019-11-16 03:39:36 +01:00
assets/logo Logo: move to /assets and add to readme. 2017-09-23 19:13:13 +02:00
benches Update compile fail tests for nightly Rust (#710) 2020-07-18 13:19:50 -10:00
docs/book Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
examples Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
integration_tests Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_actix Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_benchmarks Ensure Specification(June 2018) Compliance (#631) 2020-05-01 16:24:01 -10:00
juniper_codegen Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_graphql_ws update ws keep-alive docs (#762) 2020-09-12 01:37:26 -04:00
juniper_hyper Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_iron Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_rocket Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_rocket_async Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
juniper_subscriptions GraphQL-WS crate and Warp subscriptions update (#721) 2020-07-28 22:23:44 -10:00
juniper_warp Make interfaces great again! (#682) 2020-10-05 21:21:01 -10:00
.gitignore 0.9.2 release 2018-01-13 10:34:30 +01:00
azure-pipelines.yml Update images for azure pipelines (#555) 2020-03-09 00:12:11 -07:00
Cargo.toml Impl subscriptions for juniper_actix (#716) 2020-08-09 12:19:34 -10:00
CONTRIBUTING.md Improve contribution guide 2019-05-18 14:20:44 +02:00
LICENSE Initial import 2016-09-11 18:41:29 +02:00
Makefile.toml Remove async feature gate (#554) 2020-03-08 23:20:11 -07:00
README.md Fix broken link in README.md (#731) 2020-08-01 13:54:35 -10:00
RELEASING.md Update RELEASING.md 2019-05-16 19:22:20 -07:00
rustfmt.toml address clippy::all lints (#486) 2019-12-17 20:37:46 -08:00

Juniper

GraphQL server library for Rust

Build Status codecov Crates.io Gitter chat


GraphQL is a data query language developed by Facebook intended to serve mobile and web application frontends.

Juniper makes it possible to write GraphQL servers in Rust that are type-safe and blazingly fast. We also try to make declaring and resolving GraphQL schemas as convenient as Rust will allow.

Juniper does not include a web server - instead it provides building blocks to make integration with existing servers straightforward. It optionally provides a pre-built integration for the Actix, Hyper, Iron, Rocket, and Warp frameworks, including embedded Graphiql and GraphQL Playground for easy debugging.

The book is also available for the master branch and older versions published after 0.11.1. See the book index.

Getting Started

The best place to get started is the Juniper Book, which contains guides with plenty of examples, covering all features of Juniper. (very much WIP)

To get started quickly and get a feel for Juniper, check out the Quickstart section.

For specific information about macros, types and the Juniper api, the API Reference is the best place to look.

You can also check out the Star Wars schema to see a complex example including polymorphism with traits and interfaces. For an example of web framework integration, see the actix, hyper, rocket, iron, and warp examples folders.

Features

Juniper supports the full GraphQL query language according to the specification, including interfaces, unions, schema introspection, and validations. It can also output the schema in the GraphQL Schema Language.

As an exception to other GraphQL libraries for other languages, Juniper builds non-null types by default. A field of type Vec<Episode> will be converted into [Episode!]!. The corresponding Rust type for e.g. [Episode] would be Option<Vec<Option<Episode>>>.

Juniper follows a code-first approach to defining GraphQL schemas. If you would like to use a schema-first approach instead, consider juniper-from-schema for generating code from a schema file.

Integrations

Data types

Juniper has automatic integration with some very common Rust crates to make building schemas a breeze. The types from these crates will be usable in your Schemas automatically.

Web Frameworks

Guides & Examples

API Stability

Juniper has not reached 1.0 yet, thus some API instability should be expected.