Add example for connection::query
@@ -171,6 +171,76 @@ pub trait DataSource {
}
/// If you don't want to implement DataSource, you can also use this function to query data directly.
+///
+/// # Examples
+///
+/// ```rust
+/// use async_graphql::*;
+/// use async_graphql::connection::*;
+///
+/// struct QueryRoot;
+///
+/// struct Numbers;
+///
+/// #[SimpleObject]
+/// struct Diff {
+/// diff: i32,
+/// }
+///
+/// #[Object]
+/// impl QueryRoot {
+/// async fn numbers(&self,
+/// after: Option<String>,
+/// before: Option<String>,
+/// first: Option<i32>,
+/// last: Option<i32>
+/// ) -> FieldResult<Connection<usize, i32, EmptyFields, Diff>> {
+/// query(after, before, first, last, |after, before, first, last| async move {
+/// let mut start = after.map(|after| after + 1).unwrap_or(0);
+/// let mut end = before.unwrap_or(10000);
+/// if let Some(first) = first {
+/// end = (start + first).min(end);
+/// }
+/// if let Some(last) = last {
+/// start = if last > end - start {
+/// end
+/// } else {
+/// end - last
+/// };
+/// }
+/// let mut connection = Connection::new(start > 0, end < 10000);
+/// connection.append(
+/// (start..end).into_iter().map(|n|
+/// Edge::with_additional_fields(n, n as i32, Diff{ diff: (10000 - n) as i32 })),
+/// );
+/// Ok(connection)
+/// }).await
+/// }
+/// }
+///
+/// #[async_std::main]
+/// async fn main() {
+/// let schema = Schema::new(QueryRoot, EmptyMutation, EmptySubscription);
+///
+/// assert_eq!(schema.execute("{ numbers(first: 2) { edges { node diff } } }").await.unwrap().data, serde_json::json!({
+/// "numbers": {
+/// "edges": [
+/// {"node": 0, "diff": 10000},
+/// {"node": 1, "diff": 9999},
+/// ]
+/// },
+/// }));
+///
+/// assert_eq!(schema.execute("{ numbers(last: 2) { edges { node diff } } }").await.unwrap().data, serde_json::json!({
+/// "numbers": {
+/// "edges": [
+/// {"node": 9998, "diff": 2},
+/// {"node": 9999, "diff": 1},
+/// ]
+/// },
+/// }));
+/// }
+/// ```
pub async fn query<Cursor, Node, ConnectionFields, EdgeFields, F, R>(
after: Option<String>,
before: Option<String>,
