diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d9c78a..2bc868e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/src/request.rs b/src/request.rs index 183ec798..33fb8440 100644 --- a/src/request.rs +++ b/src/request.rs @@ -159,6 +159,50 @@ impl BatchRequest { Self::Batch(_) => Err(ParseRequestError::UnsupportedBatch), } } + + /// Returns an iterator over the requests. + pub fn iter(&self) -> impl Iterator { + match self { + BatchRequest::Single(request) => { + Box::new(std::iter::once(request)) as Box> + } + BatchRequest::Batch(requests) => Box::new(requests.iter()), + } + } + + /// Returns an iterator that allows modifying each request. + pub fn iter_mut(&mut self) -> impl Iterator { + match self { + BatchRequest::Single(request) => { + Box::new(std::iter::once(request)) as Box> + } + 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(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, D::Error>