v1.9.6
Add SimpleObject support to Interface
This commit is contained in:
parent
98cdfd4c42
commit
64e68c949b
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "async-graphql"
|
||||
version = "1.9.5"
|
||||
version = "1.9.6"
|
||||
authors = ["sunli <scott_s829@163.com>"]
|
||||
edition = "2018"
|
||||
description = "The GraphQL server library implemented by rust"
|
||||
|
@ -18,7 +18,7 @@ default = ["bson", "uuid", "url", "chrono-tz", "validators"]
|
|||
validators = ["regex"]
|
||||
|
||||
[dependencies]
|
||||
async-graphql-derive = { path = "async-graphql-derive", version = "1.9.5" }
|
||||
async-graphql-derive = { path = "async-graphql-derive", version = "1.9.6" }
|
||||
graphql-parser = "=0.2.3"
|
||||
anyhow = "1.0.26"
|
||||
thiserror = "1.0.11"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "async-graphql-actix-web"
|
||||
version = "1.0.5"
|
||||
version = "1.0.6"
|
||||
authors = ["sunli <scott_s829@163.com>"]
|
||||
edition = "2018"
|
||||
description = "async-graphql for actix-web"
|
||||
|
@ -13,7 +13,7 @@ keywords = ["futures", "async", "graphql"]
|
|||
categories = ["network-programming", "asynchronous"]
|
||||
|
||||
[dependencies]
|
||||
async-graphql = { path = "..", version = "1.9.5" }
|
||||
async-graphql = { path = "..", version = "1.9.6" }
|
||||
actix-web = "2.0.0"
|
||||
actix-web-actors = "2.0.0"
|
||||
actix = "0.9.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "async-graphql-derive"
|
||||
version = "1.9.5"
|
||||
version = "1.9.6"
|
||||
authors = ["sunli <scott_s829@163.com>"]
|
||||
edition = "2018"
|
||||
description = "Macros for async-graphql"
|
||||
|
|
|
@ -26,6 +26,7 @@ pub fn generate(object_args: &args::Object, input: &mut DeriveInput) -> Result<T
|
|||
.map(|s| quote! { Some(#s) })
|
||||
.unwrap_or_else(|| quote! {None});
|
||||
|
||||
let mut getters = Vec::new();
|
||||
let mut resolvers = Vec::new();
|
||||
let mut schema_fields = Vec::new();
|
||||
let fields = match &mut s.fields {
|
||||
|
@ -60,6 +61,7 @@ pub fn generate(object_args: &args::Object, input: &mut DeriveInput) -> Result<T
|
|||
Some(provides) => quote! { Some(#provides) },
|
||||
None => quote! { None },
|
||||
};
|
||||
let vis = &item.vis;
|
||||
let ty = &item.ty;
|
||||
|
||||
let cache_control = {
|
||||
|
@ -88,6 +90,13 @@ pub fn generate(object_args: &args::Object, input: &mut DeriveInput) -> Result<T
|
|||
});
|
||||
|
||||
let ident = &item.ident;
|
||||
getters.push(quote! {
|
||||
#[inline]
|
||||
#vis async fn #ident(&self) -> #ty {
|
||||
self.#ident.clone()
|
||||
}
|
||||
});
|
||||
|
||||
resolvers.push(quote! {
|
||||
if field.name.as_str() == #field_name {
|
||||
let ctx_obj = ctx.with_selection_set(&field.selection_set);
|
||||
|
@ -121,7 +130,11 @@ pub fn generate(object_args: &args::Object, input: &mut DeriveInput) -> Result<T
|
|||
let expanded = quote! {
|
||||
#input
|
||||
|
||||
impl #generics #crate_name::Type for #ident {
|
||||
impl #generics #ident {
|
||||
#(#getters)*
|
||||
}
|
||||
|
||||
impl #generics #crate_name::Type for #ident #generics {
|
||||
fn type_name() -> std::borrow::Cow<'static, str> {
|
||||
std::borrow::Cow::Borrowed(#gql_typename)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "async-graphql-warp"
|
||||
version = "1.0.6"
|
||||
version = "1.0.7"
|
||||
authors = ["sunli <scott_s829@163.com>"]
|
||||
edition = "2018"
|
||||
description = "async-graphql for warp"
|
||||
|
@ -13,7 +13,7 @@ keywords = ["futures", "async", "graphql"]
|
|||
categories = ["network-programming", "asynchronous"]
|
||||
|
||||
[dependencies]
|
||||
async-graphql = { path = "..", version = "1.9.5" }
|
||||
async-graphql = { path = "..", version = "1.9.6" }
|
||||
warp = "0.2.2"
|
||||
futures = "0.3.0"
|
||||
bytes = "0.5.4"
|
||||
|
|
|
@ -1,5 +1,52 @@
|
|||
use async_graphql::*;
|
||||
|
||||
#[async_std::test]
|
||||
pub async fn test_interface_simple_object() {
|
||||
#[async_graphql::SimpleObject]
|
||||
pub struct MyObj {
|
||||
#[field]
|
||||
pub id: i32,
|
||||
#[field]
|
||||
pub title: String,
|
||||
}
|
||||
|
||||
#[async_graphql::Interface(field(name = "id", type = "i32"))]
|
||||
pub struct Node(MyObj);
|
||||
|
||||
struct Query;
|
||||
|
||||
#[Object]
|
||||
impl Query {
|
||||
#[field]
|
||||
async fn node(&self) -> Node {
|
||||
MyObj {
|
||||
id: 33,
|
||||
title: "haha".to_string(),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
||||
let query = format!(
|
||||
r#"{{
|
||||
node {{
|
||||
... on Node {{
|
||||
id
|
||||
}}
|
||||
}}
|
||||
}}"#
|
||||
);
|
||||
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
|
||||
assert_eq!(
|
||||
schema.execute(&query).await.unwrap().data,
|
||||
serde_json::json!({
|
||||
"node": {
|
||||
"id": 33,
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
#[async_std::test]
|
||||
pub async fn test_multiple_interfaces() {
|
||||
struct MyObj;
|
||||
|
|
Loading…
Reference in New Issue
Block a user