diff --git a/src/lib.rs b/src/lib.rs index bfe92296..b896507a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -125,7 +125,7 @@ pub use subscription::{ WebSocketTransport, }; pub use types::{ - Connection, Cursor, DataSource, EmptyEdgeFields, EmptyMutation, EmptySubscription, + Connection, Cursor, DataSource, EmptyEdgeFields, EmptyMutation, EmptySubscription, PageInfo, QueryOperation, Upload, }; pub use validation::ValidationMode; diff --git a/src/types/connection/connection_type.rs b/src/types/connection/connection_type.rs index 52882f36..fb231805 100644 --- a/src/types/connection/connection_type.rs +++ b/src/types/connection/connection_type.rs @@ -17,9 +17,14 @@ use std::collections::HashMap; /// otherwise you can use the `Connection::map` function to convert to a type that implements `OutputValueType`. /// `E` is an extension object type that extends the edge fields. pub struct Connection { - total_count: Option, - page_info: PageInfo, - nodes: Vec<(Cursor, E, T)>, + /// The total number of records. + pub total_count: Option, + + /// Information about pagination in a connection. + pub page_info: PageInfo, + + /// All records of the current page. + pub nodes: Vec<(Cursor, E, T)>, } impl Connection { diff --git a/src/types/connection/mod.rs b/src/types/connection/mod.rs index 7dad25e2..fef4b283 100644 --- a/src/types/connection/mod.rs +++ b/src/types/connection/mod.rs @@ -8,6 +8,7 @@ use crate::{Context, FieldResult, ObjectType}; pub use connection_type::Connection; pub use cursor::Cursor; +pub use page_info::PageInfo; /// Connection query operation pub enum QueryOperation { diff --git a/src/types/connection/page_info.rs b/src/types/connection/page_info.rs index 8b285892..376a2d62 100644 --- a/src/types/connection/page_info.rs +++ b/src/types/connection/page_info.rs @@ -1,32 +1,20 @@ +#![allow(missing_docs)] + use crate::types::connection::cursor::Cursor; -use async_graphql_derive::Object; +use async_graphql_derive::SimpleObject; +/// Information about pagination in a connection +#[SimpleObject(internal, desc = "Information about pagination in a connection.")] pub struct PageInfo { - pub has_previous_page: bool, - pub has_next_page: bool, - pub start_cursor: Option, - pub end_cursor: Option, -} - -#[Object(internal)] -impl PageInfo { #[field(desc = "When paginating backwards, are there more items?")] - async fn has_previous_page(&self) -> bool { - self.has_previous_page - } + pub has_previous_page: bool, #[field(desc = "When paginating forwards, are there more items?")] - async fn has_next_page(&self) -> bool { - self.has_next_page - } + pub has_next_page: bool, #[field(desc = "When paginating backwards, the cursor to continue.")] - async fn start_cursor(&self) -> &Option { - &self.start_cursor - } + pub start_cursor: Option, #[field(desc = "When paginating forwards, the cursor to continue.")] - async fn end_cursor(&self) -> &Option { - &self.end_cursor - } + pub end_cursor: Option, } diff --git a/src/types/mod.rs b/src/types/mod.rs index 4449d9af..4d740656 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -7,7 +7,7 @@ mod optional; mod query_root; mod upload; -pub use connection::{Connection, Cursor, DataSource, EmptyEdgeFields, QueryOperation}; +pub use connection::{Connection, Cursor, DataSource, EmptyEdgeFields, PageInfo, QueryOperation}; pub use empty_mutation::EmptyMutation; pub use empty_subscription::EmptySubscription; pub use query_root::QueryRoot;