Skip to content

Commit

Permalink
Update connection type
Browse files Browse the repository at this point in the history
  • Loading branch information
sunli829 committed May 2, 2022
1 parent 028d674 commit 21916e1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 34 deletions.
2 changes: 1 addition & 1 deletion examples
49 changes: 26 additions & 23 deletions src/types/connection/connection_type.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use std::{borrow::Cow, marker::PhantomData};

use crate::{
connection::{edge::Edge, ConnectionNameType, EdgeNameType, PageInfo},
connection::{
edge::Edge, ConnectionNameType, DefaultConnectionName, DefaultEdgeName, EdgeNameType,
PageInfo,
},
types::connection::{CursorType, EmptyFields},
Object, ObjectType, OutputType, TypeName,
};
Expand All @@ -10,24 +13,24 @@ use crate::{
///
/// Connection is the result of a query for `connection::query`.
pub struct Connection<
Name,
EdgeName,
Cursor,
Node,
ConnectionFields = EmptyFields,
EdgeFields = EmptyFields,
Name = DefaultConnectionName,
EdgeName = DefaultEdgeName,
> where
Name: ConnectionNameType,
EdgeName: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
ConnectionFields: ObjectType,
EdgeFields: ObjectType,
Name: ConnectionNameType,
EdgeName: EdgeNameType,
{
_mark1: PhantomData<Name>,
_mark2: PhantomData<EdgeName>,
/// All edges of the current page.
pub edges: Vec<Edge<EdgeName, Cursor, Node, EdgeFields>>,
pub edges: Vec<Edge<Cursor, Node, EdgeFields, EdgeName>>,
/// Additional fields for connection object.
pub additional_fields: ConnectionFields,
/// If `true` means has previous page.
Expand All @@ -36,14 +39,14 @@ pub struct Connection<
pub has_next_page: bool,
}

impl<Name, EdgeName, Cursor, Node, EdgeFields>
Connection<Name, EdgeName, Cursor, Node, EmptyFields, EdgeFields>
impl<Cursor, Node, EdgeFields, Name, EdgeName>
Connection<Cursor, Node, EmptyFields, EdgeFields, Name, EdgeName>
where
Name: ConnectionNameType,
EdgeName: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
EdgeFields: ObjectType,
Name: ConnectionNameType,
EdgeName: EdgeNameType,
{
/// Create a new connection.
#[inline]
Expand All @@ -59,15 +62,15 @@ where
}
}

impl<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>
Connection<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>
impl<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>
Connection<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>
where
Name: ConnectionNameType,
EdgeName: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
ConnectionFields: ObjectType,
EdgeFields: ObjectType,
Name: ConnectionNameType,
EdgeName: EdgeNameType,
{
/// Create a new connection, it can have some additional fields.
#[inline]
Expand All @@ -88,15 +91,15 @@ where
}

#[Object(internal, name_type)]
impl<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>
Connection<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>
impl<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>
Connection<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>
where
Name: ConnectionNameType,
EdgeName: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
ConnectionFields: ObjectType,
EdgeFields: ObjectType,
Name: ConnectionNameType,
EdgeName: EdgeNameType,
{
/// Information to aid in pagination.
async fn page_info(&self) -> PageInfo {
Expand All @@ -110,7 +113,7 @@ where

/// A list of edges.
#[inline]
async fn edges(&self) -> &[Edge<EdgeName, Cursor, Node, EdgeFields>] {
async fn edges(&self) -> &[Edge<Cursor, Node, EdgeFields, EdgeName>] {
&self.edges
}

Expand All @@ -121,15 +124,15 @@ where
}
}

impl<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields> TypeName
for Connection<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>
impl<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName> TypeName
for Connection<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>
where
Name: ConnectionNameType,
EdgeName: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
ConnectionFields: ObjectType,
EdgeFields: ObjectType,
Name: ConnectionNameType,
EdgeName: EdgeNameType,
{
#[inline]
fn type_name() -> Cow<'static, str> {
Expand Down
16 changes: 8 additions & 8 deletions src/types/connection/edge.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::{borrow::Cow, marker::PhantomData};

use crate::{
connection::EmptyFields,
connection::{DefaultEdgeName, EmptyFields},
types::connection::{CursorType, EdgeNameType},
InputValueError, InputValueResult, ObjectType, OutputType, Scalar, ScalarType, SimpleObject,
TypeName, Value,
Expand Down Expand Up @@ -32,12 +32,12 @@ impl<T: CursorType + Send + Sync> ScalarType for CursorScalar<T> {
/// An edge in a connection.
#[derive(SimpleObject)]
#[graphql(internal, name_type)]
pub struct Edge<Name, Cursor, Node, EdgeFields>
pub struct Edge<Cursor, Node, EdgeFields, Name = DefaultEdgeName>
where
Name: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
EdgeFields: ObjectType,
Name: EdgeNameType,
{
#[graphql(skip)]
_mark: PhantomData<Name>,
Expand All @@ -49,20 +49,20 @@ where
pub(crate) additional_fields: EdgeFields,
}

impl<Name, Cursor, Node, EdgeFields> TypeName for Edge<Name, Cursor, Node, EdgeFields>
impl<Cursor, Node, EdgeFields, Name> TypeName for Edge<Cursor, Node, EdgeFields, Name>
where
Name: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
EdgeFields: ObjectType,
Name: EdgeNameType,
{
#[inline]
fn type_name() -> Cow<'static, str> {
Name::type_name::<Node>().into()
}
}

impl<Name, Cursor, Node, EdgeFields> Edge<Name, Cursor, Node, EdgeFields>
impl<Cursor, Node, EdgeFields, Name> Edge<Cursor, Node, EdgeFields, Name>
where
Name: EdgeNameType,
Cursor: CursorType + Send + Sync,
Expand All @@ -85,11 +85,11 @@ where
}
}

impl<Name, Cursor, Node> Edge<Name, Cursor, Node, EmptyFields>
impl<Cursor, Node, Name> Edge<Cursor, Node, EmptyFields, Name>
where
Name: EdgeNameType,
Cursor: CursorType + Send + Sync,
Node: OutputType,
Name: EdgeNameType,
{
/// Create a new edge.
#[inline]
Expand Down
4 changes: 2 additions & 2 deletions src/types/connection/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ pub async fn query<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields, F
first: Option<i32>,
last: Option<i32>,
f: F,
) -> Result<Connection<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>>
) -> Result<Connection<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>>
where
Name: ConnectionNameType,
EdgeName: EdgeNameType,
Expand All @@ -205,7 +205,7 @@ where
EdgeFields: ObjectType,
F: FnOnce(Option<Cursor>, Option<Cursor>, Option<usize>, Option<usize>) -> R,
R: Future<
Output = Result<Connection<Name, EdgeName, Cursor, Node, ConnectionFields, EdgeFields>, E>,
Output = Result<Connection<Cursor, Node, ConnectionFields, EdgeFields, Name, EdgeName>, E>,
>,
E: Into<Error>,
{
Expand Down

0 comments on commit 21916e1

Please sign in to comment.