Expose executor.location()
, rename executor.push_error()
to
`executor.push_error_at()` and add a new `executor.push_error()`
This commit is contained in:
parent
b3ea59cd3b
commit
f7625056ac
2 changed files with 16 additions and 6 deletions
|
@ -288,8 +288,7 @@ impl<'a, CtxT> Executor<'a, CtxT> {
|
||||||
match self.resolve(info, value) {
|
match self.resolve(info, value) {
|
||||||
Ok(v) => v,
|
Ok(v) => v,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let position = self.field_path.location().clone();
|
self.push_error(e);
|
||||||
self.push_error(e, position);
|
|
||||||
Value::null()
|
Value::null()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -355,8 +354,19 @@ impl<'a, CtxT> Executor<'a, CtxT> {
|
||||||
self.fragments.get(name).map(|f| *f)
|
self.fragments.get(name).map(|f| *f)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add an error to the execution engine
|
/// The current location of the executor
|
||||||
pub fn push_error(&self, error: FieldError, location: SourcePosition) {
|
pub fn location(&self) -> &SourcePosition {
|
||||||
|
self.field_path.location()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Add an error to the execution engine at the current executor location
|
||||||
|
pub fn push_error(&self, error: FieldError) {
|
||||||
|
let location = self.location().clone();
|
||||||
|
self.push_error_at(error, location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Add an error to the execution engine at a specific location
|
||||||
|
pub fn push_error_at(&self, error: FieldError, location: SourcePosition) {
|
||||||
let mut path = Vec::new();
|
let mut path = Vec::new();
|
||||||
self.field_path.construct_path(&mut path);
|
self.field_path.construct_path(&mut path);
|
||||||
|
|
||||||
|
|
|
@ -390,7 +390,7 @@ fn resolve_selection_set_into<T, CtxT>(
|
||||||
match field_result {
|
match field_result {
|
||||||
Ok(v) => merge_key_into(result, response_name, v),
|
Ok(v) => merge_key_into(result, response_name, v),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
sub_exec.push_error(e, start_pos.clone());
|
sub_exec.push_error_at(e, start_pos.clone());
|
||||||
result.insert((*response_name).to_owned(), Value::null());
|
result.insert((*response_name).to_owned(), Value::null());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -439,7 +439,7 @@ fn resolve_selection_set_into<T, CtxT>(
|
||||||
result.insert(k, v);
|
result.insert(k, v);
|
||||||
}
|
}
|
||||||
} else if let Err(e) = sub_result {
|
} else if let Err(e) = sub_result {
|
||||||
sub_exec.push_error(e, start_pos.clone());
|
sub_exec.push_error_at(e, start_pos.clone());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
resolve_selection_set_into(
|
resolve_selection_set_into(
|
||||||
|
|
Loading…
Reference in a new issue