Skip to content

Commit a8be7ac

Browse files
authored
Merge pull request #112 from mathstuf/no-such-field-error
graphql_query_derive: improve "no such field" error message
2 parents c70d931 + 59b8204 commit a8be7ac

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

graphql_client_codegen/src/interfaces.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ impl GqlInterface {
6262
);
6363

6464
let object_fields =
65-
response_fields_for_selection(&self.fields, query_context, &object_selection, prefix)?;
65+
response_fields_for_selection(&self.name, &self.fields, query_context, &object_selection, prefix)?;
6666

6767
let object_children =
6868
field_impls_for_selection(&self.fields, query_context, &object_selection, prefix)?;

graphql_client_codegen/src/objects.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ impl GqlObject {
158158
selection: &Selection,
159159
prefix: &str,
160160
) -> Result<Vec<TokenStream>, failure::Error> {
161-
response_fields_for_selection(&self.fields, query_context, selection, prefix)
161+
response_fields_for_selection(&self.name, &self.fields, query_context, selection, prefix)
162162
}
163163
}
164164

graphql_client_codegen/src/shared.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use deprecation::{DeprecationStatus, DeprecationStrategy};
22
use failure;
33
use heck::{CamelCase, SnakeCase};
4+
use itertools::Itertools;
45
use objects::GqlObjectField;
56
use proc_macro2::{Ident, Span, TokenStream};
67
use query::QueryContext;
@@ -95,6 +96,7 @@ pub(crate) fn field_impls_for_selection(
9596
}
9697

9798
pub(crate) fn response_fields_for_selection(
99+
type_name: &str,
98100
schema_fields: &[GqlObjectField],
99101
context: &QueryContext,
100102
selection: &Selection,
@@ -110,8 +112,15 @@ pub(crate) fn response_fields_for_selection(
110112

111113
let schema_field = &schema_fields
112114
.iter()
113-
.find(|field| field.name.as_str() == name.as_str())
114-
.ok_or_else(|| format_err!("Could not find field: {}", name.as_str()))?;
115+
.find(|field| &field.name == name)
116+
.ok_or_else(|| {
117+
format_err!(
118+
"Could not find field `{}` on `{}`. Available fields: `{}`.",
119+
name.as_str(),
120+
type_name,
121+
schema_fields.iter().map(|ref field| &field.name).format("`, `"),
122+
)
123+
})?;
115124
let ty = schema_field.type_.to_rust(
116125
context,
117126
&format!("{}{}", prefix.to_camel_case(), alias.to_camel_case()),

0 commit comments

Comments
 (0)