Commit graph

563 commits

Author SHA1 Message Date
Christoph Herzog
2f5e3ab29b 0.11.1 Release
* Changelog
* Cargo.toml version bumps
2018-12-19 03:53:33 +01:00
Christoph Herzog
8dd2eafef8 Add *Internal custom derive variants for juniper crate
Currently, custom derives inside the main juniper crate are supported by
an ugly hack using the __juniper_use_everything macro.

This commit adds new custom derive variants that are for
main juniper crate internal use only (GraphQL{Enum,InputObject}Internal.

All custom derives inside the juniper crate are refactored to use the
new '*Internal' derives.

This allows us to
* remove the use_everything macro,
* simplify the generated code for custom derives
* support the Rust 2018 edition
2018-12-19 03:53:33 +01:00
Christoph Herzog
3f1ae66b2c Refactor macros to use $crate:: method instead of local_inner_macros.
This commit refactors the macros to use the $crate::inner_macro
trick instead of local_inner_macros.

This is possible since we only support rust 1.30 as a minimum version.
(the $crate:: method only works on 1.30+).

With this change, the wrapper helper macros for std macros can also
be removed.
2018-12-19 03:53:33 +01:00
Christian Legnitto
dee849c88b Bump min rust version to 1.30.0
Some dependiencies rely on cc, which after
228513449f
requires 1.30.0.
2018-12-18 23:17:43 +01:00
Christian Legnitto
81214dd5bf Fix typo 2018-12-17 15:15:56 -08:00
Christian Legnitto
9459435670 Update changelogs
Not sure why `cargo release` didn't do this...
2018-12-17 15:06:16 -08:00
Christian Legnitto
32c8979399 Tweak changelog rewriting 2018-12-17 15:01:31 -08:00
Christian Legnitto
f52c0e141e Don't use a dev version 2018-12-17 14:48:29 -08:00
Christian Legnitto
bcf2223e89 Automate updating versions in changelog
This is part of https://github.com/graphql-rust/juniper/issues/248
2018-12-17 14:04:46 -08:00
Christian Legnitto
905c73af78 Move juniper changelog to a single file in juniper crate 2018-12-17 14:04:46 -08:00
Christian Legnitto
2502c1b6da Set up some release automation.
Partially fixes https://github.com/graphql-rust/juniper/issues/248.

* Install `cargo-release`. (currently need a patched one with https://github.com/sunng87/cargo-release/pull/74)
* Run `cargo make release-dry-run` to do a dry run of a release
* Run `cargo make release` to do a minor versioned release of every crate
* Run `cargo make release-patch` to do a patch release of every crate

To only release one crate:
* Change directories into the desired crate
* Point `cargo-make` to the workspace-level Makefile when running a command. For example, `cargo make --makefile ../Makefile.toml release-dry-run`.

From the workspace root, run `cargo
2018-12-17 13:45:56 -08:00
Christian Legnitto
73175d7a10 Bump version 2018-12-17 13:11:21 -08:00
Christian Legnitto
7bb62ff259
Make rust 1.28 minimum supported version (#285) 2018-12-03 17:28:49 -08:00
Brendan Ball
e2212a539a Add method to scalar (#283) 2018-11-29 09:47:19 -08:00
Georg Semmler
4ecf558066 Use doc comments instead of the doc attribute in the changelog examples (#273) 2018-11-11 14:58:50 -08:00
Kevin Stenerson
0f2a654471 Infer graphql "deprecation" from #[deprecated(note = "...")] in derive (and macros) (#269)
* Update object/iface macro with doc/deprecated attrs for fields

* Use the note from `#[deprecated]` by default in derived GraphQLType

* Update to support multiline raw-docstring format

* Support bare deprecated attribute

* Update arguments to support #[doc] for parity with previous ` as ` syntax
2018-10-27 21:28:48 -06:00
Cole Graber-Mitchell
cf7e8df65f Make operation_name public (#265)
Fixes #253.
2018-10-23 06:09:39 -06:00
Georg Semmler
2e5df9f8a4 Introduce an abstraction for scalar values (#251)
Introduce an abstraction for scalar values

Before this change,  possible scalar values were hard coded to be representable
by one of the following types: `i32`, `f64`, `String` or `bool`. This
restricts the types of custom scalar values that can be defined. For
example, it was not possible to define a scalar value that represents an
`i64` without mapping it to a string (which would be inefficient).

One solution to fix the example above would simply be to change the
internal representation to allow it to represent an `i64`, but this would
only fix the problem for one type (until someone wants to support
`i128` for example). Also this would make juniper not follow the
GraphQL standard closely.

This commit takes another approach, by making the exact "internal"
representation of scalar values swappable (in such a way that a downstream crate could provide its own representation tailored to their needs). This allows juniper to provide a default type that only
contains the types described in the standard whereas other crates could define custom scalars for their needs.

To accomplish this we need to change several things in the current implementation:

* Add some traits that abstract the behavior of such a scalar value representation
* Change `Value` and `InputValue` to have a scalar variant (with a
  generic type) instead of hard coded variants for the standard
  types. This implies adding a generic parameter to both enums that
  needs to be added in the whole crate.
* Change the parser to allow deciding between different types of
  scalar values. The problem is basically that the original parser
  implementation had no way to know whether a parsed integer number is
  a `i32` or a `i64` (for example). To fix this we added some knowledge
  of the existing schema to the parser.
* Fix some macros and derives to follow the new behavior.

This commit also contains an unrelated change about the way `juniper_codegen`
resolves items from `juniper`. The `_internal` flag is removed and
the resolution is replaced by a macro.

The scalar parsing strategy is as follows:

* Pass optional type information all the way down in the parser. If a
  field/type/… does note exist, just do not pass down the type
  information.
* The lexer now distinguishes between several fundamental scalar types (`String`, `Float`, `Int`). It does not try to actually parse those values, instead it just annotates them that this is a floating point number, an integer number, or a string value, etc.
* If type information exists while parsing a scalar value, try the following:
    1. Try parsing the value using that type information.
    2. If that fails try parsing the value using the inferred type information from the lexer.
* If no type information exists, try parsing the scalar value using the inferred type from the lexer,

All macros support the introduced scalar value abstraction. It is now possible to specify if a certain implementation should be based on a specific scalar value representation or be generic about the exact representation. All macros now default to the `DefaultScalarValue` type provided by
`juniper` if no scalar value representation is specified. This is done with usability and backwards compatibility in mind.

Finally, we allow specifying the scalar value representations via an attribute
(`#[graphql(scalar = "Type")]`). A default generic implementation
is provided.
2018-10-22 21:40:14 -06:00
Christian Legnitto
bd455c9130
Remove Appveyor (#264)
Now that we have azure pipelines set up, there is no need
to use appveyor.

Part of https://github.com/graphql-rust/juniper/issues/259
2018-10-08 21:15:09 -07:00
Dylan DPC
95efe3821c Update uuid to 0.7 (#262) 2018-10-07 11:11:06 -07:00
Christian Legnitto
9c1ce1fb7a
0.10.0 release (#236)
* Bump` juniper`, `juniper_codegen`, and `juniper_tests` versions.

* Bump integration crate requirements to include 0.10.0. `juniper_iron` gets a semver breaking version as it has a breaking change but `juniper_iron` does not.

* Move `juniper_rocket` changelog into one file. This aligns with `juniper_iron` and will be easier
to automate in the future.

* Let `juniper_warp` and `juniper_hyper` use `0.9.x` versions of Juniper. They don't rely on anything in 0.10.0 so don't require it.
2018-09-13 09:13:31 -07:00
Tom Houlé
fd636e07df Add integration crate for the warp framework (#216) 2018-09-07 14:28:56 -07:00
Christian Legnitto
1ee3dab3b7
Handle InputValues that return None (#244)
Fixes https://github.com/graphql-rust/juniper/issues/242.
2018-09-07 08:27:33 -07:00
Christian Legnitto
9bee530bcd
Pretty print debugging info (#243) 2018-09-05 22:47:12 -07:00
Christian Legnitto
f2f68f868a
Add failure cases to http integration tests (#239) 2018-09-02 10:59:54 -07:00
Damir Vandic
44002f0884 Hyper integration crate (#230)
This adds the new integration crate `juniper_hyper`.
2018-09-01 20:02:01 -07:00
Christian Legnitto
45004f77a3
Allow crate type paths in resolve for graphql_scalar! (#229)
Fixes https://github.com/graphql-rust/juniper/issues/227.
2018-08-27 15:26:33 -07:00
Yusuke Sasaki
d496220e10 Use local_inner_macros to all helper macros (#233)
This enables  Rust2018-style macro imports:

```rust
use juniper::graphql_object;

graphql_object!(User: () |&self| { ... });
```

In the future when dropping compatibility with pre-2018 compilers,
this can be replaced with the explicit `$crate` prefixes instead of
`local_inner_macros`.

In `macro_rules!` with the annotation `local_inner_macros`, all of macro calls
are transformed into `$crate::builtin!(...)` (See [1] for details).
Therefore, name resolutions of built-in macros are not perfomed correctly.
To avoid this, some helper macros are introduced to make built-in
macros be interpreted as crate-local macros.

[1]: https://github.com/rust-lang/rust/issues/53464#issuecomment-414049821
2018-08-26 12:11:27 -07:00
Christian Legnitto
c04b06f79b
Fix bad merge (#222) 2018-08-19 08:10:18 -06:00
Damir Vandic
ec59766d51 Use 'extensions' as field for error details (#219) 2018-08-13 07:53:52 -06:00
Georg Semmler
90b89f00ee Performance improvements (#202)
Performance improvements

* Replace the IndexMap in the serialized object with a plain
  `Vec<(String, Value)>` because linear search is faster for few
  elements

* Some general tweaks to skip some allocations
2018-08-13 07:47:18 -06:00
Christoph Herzog
56f71e934b Format code 2018-07-19 16:18:49 +02:00
Paul Colomiets
4dc155c51a Implement GraphQLType and ToInputValue for Arc<T> 2018-07-19 16:18:49 +02:00
Sharad Chand
f115d0bb57 Allow custom errors to be returned from queries, mutations (#205)
* Added trait to convert a custom error type into a FieldError
* Convert the error type of the gql fields if it implements IntoFieldError
* Added test case to check if custom error handling works
* Added to changelog
2018-07-12 18:24:29 -07:00
Paul Colomiets
2e9408e5f6 Consistent error serializing for GraphQLError (#207)
GraphQL spec requires every error contain `{"message": "field"}`. Every
error in juniper except ones fixed here are reported consistently with
this style. This commit fixes ones left.
2018-07-10 08:07:18 -07:00
Cameron Eldridge
e84167286b Handle an array of GraphQL queries (#171) 2018-06-07 17:44:30 -07:00
Kevin Stenerson
f2d228b8ae Add helpers to build custom GraphQLResponse (#158) 2018-05-29 23:28:36 -07:00
Paul Colomiets
69db4c247b Deserialize large integers as InputValue::float (fixes #178) 2018-05-23 00:21:57 -07:00
Georg Semmler
34391855af Fix imports 2018-05-20 15:55:34 +02:00
Georg Semmler
19e76865c9 Remove unused type_name field to fix tests 2018-05-20 15:55:34 +02:00
Georg Semmler
cfc3109109 Rename childs to children 2018-05-20 15:55:34 +02:00
Georg Semmler
da9c21ccfe Add some documentation to the lookahead feature 2018-05-20 15:55:34 +02:00
Georg Semmler
61c07b95fc Small improvements + rustfmt 2018-05-20 15:55:34 +02:00
Georg Semmler
dd99914fbe Add a basic lookahead functionality 2018-05-20 15:55:34 +02:00
theduke
61f0c7d337
Update uuid version range
Allow 0.5 and 0.6
2018-05-10 06:43:28 +02:00
Christoph Herzog
9313c7ca6d Run rust fmt. 2018-05-03 07:38:10 +02:00
Marcus Griep
b94ed37c1f Remove unnecessary format!()
The `E::custom()` function requires a value of any type that implements
`fmt::Display`, so a plain `&str` works just fine here.
2018-05-03 07:27:15 +02:00
Marcus Griep
d1cddfb55f Revert lossy conversions to use as
The conversions in this changeset cannot use the `From<T>` trait
implementation because the conversion is lossy, either because they
involve converting a signed value to an unsigned value (`i32`⇒`u64`)
or because the convert from a larger data type to a smaller one
(`u64`⇒`i32`). In this case, the `as` type cast is necessary to perform
a bitwise conversion.

This coercion can cause negative values to become very large unsigned
values. This is intentional on line 90.
2018-05-03 07:27:15 +02:00
Marcus Griep
73a4efe984 Change $outname from :tt to :expr
It doesn't appear that `:tt` accepts the `stringify!()`-ed value in this
position. The :tt is only later used as an `:expr` to produce the name
for metadata purposes.

Converting this position to be an `:expr` allows the `stringify!()`-ed
value and accepts all current uses of the `graphql_scalar!()` macro in
this repository.
2018-05-03 07:27:15 +02:00
Atul Bhosale
875c80748d Fix cargo clippy warnings 2018-05-03 07:27:15 +02:00
Atul Bhosale
ea3c425f04 Replace try! with ? 2018-05-03 07:27:15 +02:00
Christian Legnitto
218654ee97 Switch to indexmap 1.0
`ordermap` changed names to `indexmap` and released a stable 1.0.
2018-04-22 07:49:05 +02:00
Georg Semmler
2ea7d9b46e Allow graphiql to pass credentials to the server (#162) 2018-03-29 05:02:46 +02:00
Sebastian Porto
841fd7e26d Change serialization of Chronos NaiveDate (#151)
Fix chrono DateTime support

The DateTime support was improperly implemented with time (hour + minute support), which is fixed by this commit.

Documentation and tests have also been updated.

Only author: @sporto
2018-03-21 17:52:22 +01:00
Carlos Diaz-Padron
63d8a3d1a0 Handle list merging 2018-03-05 12:02:22 +01:00
Carlos Diaz-Padron
509a6f12b9 Fix merging parallel inline fragments 2018-03-05 12:02:22 +01:00
Christian Legnitto
0cc11a0dbe Make tests compile on latest nightly
Without this change tests were failing to compile:

```
---- src/value.rs - graphql_value (line 196) stdout ----
    error[E0468]: an `extern crate` loading macros must be at the crate root
 --> src/value.rs:197:14
  |
3 | #[macro_use] extern crate juniper;
  |              ^^^^^^^^^^^^^^^^^^^^^

thread 'rustc' panicked at 'couldn't compile the test', librustdoc/test.rs:295:13
note: Run with `RUST_BACKTRACE=1` for a backtrace.
```

I also confirmed that `main` does not show up in the docs with
this change.
2018-02-21 09:40:42 +01:00
Ivan Dubrov
bfe2ef511a Provide type info to the concrete_type_name 2018-01-20 10:53:18 +01:00
Christoph Herzog
d00e74bb4e Format entire codebase with rustfmt 2018-01-13 12:25:55 +01:00
Christoph Herzog
406bdaa55c Update embedded graphiql + move graphiql to http module
* Update graphiql to 0.11 and react to v16.
* Move graphiql to be a submodule of http
2018-01-13 11:44:36 +01:00
Christoph Herzog
40c946c81c 0.9.2 release
* Changelogs
* Update versions and dependency versions
2018-01-13 10:34:30 +01:00
Christian Legnitto
9362d6954c url_decode parameters in Rocket integration
Also as part of this change I fixed and enabled
the http integration tests for Rocket.

Fixes https://github.com/graphql-rust/juniper/issues/116.
2018-01-13 08:50:13 +00:00
Josh Marlow
b1543f480a Fixed case where .unwrap was being called instead of the Option just being propagated up the call chain 2018-01-13 08:20:51 +00:00
Christian Legnitto
d34b6a85ad Fix some warnings 2018-01-13 07:48:39 +00:00
Christian Legnitto
203af1ce98 Support __typename for unions
See http://graphql.org/learn/queries/#meta-fields.

Fixes https://github.com/graphql-rust/juniper/issues/112.
2017-12-06 11:26:31 +01:00
theduke
ca9d5c1c1a Bump to 0.9.1 and fix up Cargo.toml files 2017-12-03 18:48:38 +01:00
theduke
0f916f4aa6 Remove ResultExt and jtry! macro 2017-12-03 18:33:35 +01:00
theduke
eb70d29e04 Fix readme link in juniper crate 2017-12-03 17:17:41 +01:00
theduke
ed58f2671b Final readme and cargo.toml fixups 2017-12-03 15:14:23 +01:00
theduke
4d6a99fe4e Fix up Cargo.toml files and documentation. 2017-12-02 18:33:20 +01:00
theduke
0024e67dae Move enum introspection tests to executor_tests 2017-12-02 15:46:11 +01:00
theduke
0e3c9940c6 Exchange graphql_input_object! macro to custom derive
* Refactor all internal use to derive
* Remove macro
* Move tests to executor_tests
2017-12-02 15:43:41 +01:00
theduke
f858f416b8 Remove graphql_enum! macro in favor of custom derive
* Extend derive for enums to allow deriving inside the juniper crate
  itself. Note: this is a rather ugly hack right now, FIXME is in the
  code
* Remove the graphql_enum! macro and replace all internal use with
  derive
* Refactor introspection tests to use derive
2017-12-02 15:43:22 +01:00
theduke
709231dc46 Make juniper_codegen dependency non-optional. 2017-12-02 03:55:14 +01:00
theduke
40d8f905e9 Move executor.rs in subfolder
Preparation for splitting up executor.rs
2017-12-02 03:51:28 +01:00
theduke
f3626c57c6 Move to_camel_case helper to util module. 2017-12-02 03:36:07 +01:00
theduke
3750349e71 Bump version to 0.9.0 2017-12-02 02:31:56 +01:00
theduke
141292ad91 Export codegen from main juniper crate
Use a trick for re-exporting proc-macros to supply juniper_derive as a
dependency of juniper.

Users will now just have to depend on juniper directly.
2017-12-02 02:27:41 +01:00
Magnus Hallin
c4ded5781d Fix bug where non-null lists could contain null if errors were returned 2017-11-20 08:53:51 +01:00
Magnus Hallin
23105259de Add another test for null handling in lists 2017-11-20 08:53:32 +01:00
Magnus Hallin
d0e9202f41 Add tracking of the current type being resolved in the Executor
This is not 100% accurate - it will be set to the literal type of what
a field returns, so it might be wrapped in non-null/list when it
technically shouldn't.

For this use-case it's fine, but if we want to (officially) add it to
the public API surface, we should probably make it accurate.
2017-11-20 08:53:13 +01:00
Jacob Haslehurst
8cf2707faa add failing test for list of non-null items for issue #84 2017-11-20 11:44:11 +11:00
Magnus Hallin
dca88b0fa4 Don't use global variable in test 2017-11-18 18:33:57 +01:00
Magnus Hallin
7b695c406c Propagate errors to closest nullable parent field
This also fixes a bug where context switching on optional values did
not properly work.
2017-11-18 18:19:11 +01:00
Cameron Eldridge
625bac1b62 Add support for Z time zone and fractional seconds in date formats (#97)
* Add support for Z time zone and fractional seconds in date formats and reduce repitition in tests
2017-11-01 16:59:06 +01:00
thomas-jeepe
6d345b6b98 Serialize on GraphQLRequest
What the title says
2017-10-30 16:24:47 +01:00
thomas-jeepe
76a1a042aa Derive Clone for GraphQLRequest
This is just a useful thing for me because I need to clone the http request.

This shouldn't really influence anything else, every field already implements `Clone`
2017-10-29 09:12:56 +01:00
Jacob Haslehurst
62d5e28a97 Give DateTime scalars valid names to pass validation 2017-10-20 18:57:48 +02:00
Jane Keibler
650561f885 Removing configuration that rust nightly
The feature function causes the following error:
error[E0554]: #![feature] may not be used on the stable release channel
2017-10-20 18:35:42 +02:00
Sam Rijs
74c5f562e3 Merge branch 'master' into perf/schema-fnv-hash-map 2017-10-02 19:43:49 +11:00
Sam Rijs
bcb594edc1 perf(schema): use FnvHashMap for type and directive names 2017-10-02 19:07:09 +11:00
Christian Legnitto
2a2534525d chrono feature: Implement GraphQLType for chrono types
Fixes https://github.com/graphql-rust/juniper/issues/87
2017-09-30 08:21:42 +02:00
theduke
f9d6f2c83f Revert "(juniper) Clean up uuid and url features."
This reverts commit dcdc03a9b9.
2017-09-12 11:01:56 +02:00
theduke
dcdc03a9b9 (juniper) Clean up uuid and url features.
* Do not enable uuid/url feature by default
* CI: customize juniper Makefile to test with all features
2017-09-11 23:26:32 +02:00
Christian Legnitto
c1cb120176 url feature: Implement url::Url as a scalar type 2017-09-11 16:10:54 +02:00
rushmorem
f7625056ac Expose executor.location(), rename executor.push_error() to
`executor.push_error_at()` and add a new `executor.push_error()`
2017-09-02 13:35:57 +02:00
Magnus Hallin
b3ea59cd3b Merge pull request #80 from graphql-rust/field-error-refactor
Field error refactor
2017-09-02 10:44:50 +02:00
Christian Legnitto
5d43532d73 Preserve the order of requested fields
Fixes https://github.com/graphql-rust/juniper/issues/82
2017-09-02 10:40:04 +02:00
theduke
0372de84d5 Rename ToInputValue::to to to_input_value() 2017-08-29 05:34:35 +02:00
theduke
164aa29fdc Rename FromInputValue::from() to from_input_value() 2017-08-29 05:34:35 +02:00
theduke
0915c05c6c uuid feature: Implement uuid::Uuid as a scalar type
Fixes #86
2017-08-28 18:58:00 +02:00
Magnus Hallin
6710d780cf Update FieldError documentation with new value literal macro 2017-08-08 22:44:20 +02:00
Magnus Hallin
a97ac59135 Add value literal macro 2017-08-08 22:27:45 +02:00
Magnus Hallin
0c3c219364 Refiy FieldError as a real datatype, add a structured data field 2017-08-08 21:26:51 +02:00
Sam Rijs
d1d5829b44 Reject types with invalid names
Fixes #72
2017-08-08 21:17:21 +10:00
Sam Rijs
a0f2c3bbdd Implement support for dynamic schemas 2017-08-07 22:15:09 +02:00
theduke
a826b22ffb Update Readme and Cargo files for new repo url 2017-08-07 08:20:05 +02:00
theduke
2ca9baa441 Extracted iron/rocket crates and updated README.
Those now live in separate repos.
2017-08-07 08:20:05 +02:00
theduke
0c7e39f14e Rust fmt the whole codebase 2017-08-06 21:15:08 +02:00
theduke
619a2e57f9 Extraction of iron and rocket features into separate crates.
* Added juniper_iron crate
* Fixed up juniper_rocket crate
* Updated juniper/Cargo.toml
* Updated docs (readme, module docs)
* Export http integrator tests with export-test-schema feature
* Update CI tests (Use cargo-make )
* Format parts of the code base
2017-08-06 17:42:31 +02:00
Stanko Krtalić
82ecd92090 Fix Rocket integration
Rocket's traits have changed in version 0.3.0, this commit adjusts
the existing implementation to be compatible with the latest
version of the traits.
2017-08-06 13:41:55 +02:00
theduke
c008658052 Moving examples to juniper crate (for now) 2017-07-12 21:51:24 +02:00
theduke
4ab2f20b8f Restructure repository to Cargo workspace.
This makes it possible to:
* extract parser to own crate
* add juniper_codegen crate for custom derive stuff
* add integration tests
2017-07-12 21:51:24 +02:00