3个版本
0.3.2 | 2021年4月24日 |
---|---|
0.3.1 | 2021年4月24日 |
0.3.0 | 2021年4月23日 |
#871 in HTTP服务器
每月24次下载
在 vimwiki-server 中使用
345KB
5.5K SLoC
entity-async-graphql
提供数据结构,通过 entity
对象暴露 async-graphql
。
示例
利用 宏
功能以及 entity-inmemory
和 futures
crate
use async_graphql::{Context, EmptyMutation, EmptySubscription, Object, Schema};
use entity::*;
use entity_async_graphql::*;
use entity_inmemory::InmemoryDatabase;
#[simple_ent]
#[derive(EntObject, EntFilter)]
struct User {
name: String,
age: u8,
#[ent(edge)]
friends: Vec<User>,
}
struct RootQuery;
#[Object]
impl RootQuery {
async fn users(
&self,
ctx: &Context<'_>,
filter: GqlUserFilter,
) -> async_graphql::Result<Vec<User>> {
let db = ctx.data::<DatabaseRc>()?;
db.find_all_typed::<User>(filter.into())
.map_err(|x| async_graphql::Error::new(x.to_string()))
}
}
fn main() {
// Create an empty database and convert from InmemoryDatabase -> DatabaseRc
let db = db_to_rc(InmemoryDatabase::default());
// Make a user and write it into the database
let user = User::build()
.name(String::from("Fred Flintstone"))
.age(38)
.friends(Vec::new())
.finish()
.expect("Built user");
let _ = db.insert_typed(user).expect("Wrote to database");
// Define our GraphQL schema and add our database as context data
let schema = Schema::build(RootQuery, EmptyMutation, EmptySubscription)
.data(db)
.finish();
// Execute a GraphQL query and print the results
let res = futures::executor::block_on(schema.execute(r#"
{
user(filter: { name: { text_ends_with: "Flintstone" } }) {
id
name
}
}
"#));
println!("{:#?}", res);
}
特性标志
宏
- 为生成新实体的所需async-graphql
代码提供宏支持
依赖关系
~15–27MB
~476K SLoC