Add some helper methods for `BatchRequest`.

- BatchRequest::iter
- BatchRequest::iter_mut
- BatchRequest::variables
- BatchRequest::data
- BatchRequest::disable_introspection
This commit is contained in:
Sunli 2021-12-04 15:14:42 +08:00
parent 19ac121228
commit 922c2324e2
2 changed files with 50 additions and 0 deletions

View File

@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
- Fix possible deadlock in dataloader. [#555](https://github.com/async-graphql/async-graphql/issues/555)
- Add some helper methods for `BatchRequest`.
- BatchRequest::iter
- BatchRequest::iter_mut
- BatchRequest::variables
- BatchRequest::data
- BatchRequest::disable_introspection
## [3.0.11] 2021-12-02

View File

@ -159,6 +159,50 @@ impl BatchRequest {
Self::Batch(_) => Err(ParseRequestError::UnsupportedBatch),
}
}
/// Returns an iterator over the requests.
pub fn iter(&self) -> impl Iterator<Item = &Request> {
match self {
BatchRequest::Single(request) => {
Box::new(std::iter::once(request)) as Box<dyn Iterator<Item = &Request>>
}
BatchRequest::Batch(requests) => Box::new(requests.iter()),
}
}
/// Returns an iterator that allows modifying each request.
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut Request> {
match self {
BatchRequest::Single(request) => {
Box::new(std::iter::once(request)) as Box<dyn Iterator<Item = &mut Request>>
}
BatchRequest::Batch(requests) => Box::new(requests.iter_mut()),
}
}
/// Specify the variables for each requests.
pub fn variables(mut self, variables: Variables) -> Self {
for request in self.iter_mut() {
request.variables = variables.clone();
}
self
}
/// Insert some data for for each requests.
pub fn data<D: Any + Clone + Send + Sync>(mut self, data: D) -> Self {
for request in self.iter_mut() {
request.data.insert(data.clone());
}
self
}
/// Disable introspection queries for for each requests.
pub fn disable_introspection(mut self) -> Self {
for request in self.iter_mut() {
request.disable_introspection = true;
}
self
}
}
fn deserialize_non_empty_vec<'de, D, T>(deserializer: D) -> Result<Vec<T>, D::Error>