This is intended as a very low-friction means of turning structured yaml into a GraphQL service.
Your first place to look should be the quick start example in the source repo. There you'll find a way to containerize a GraphQL service given only a quick container build against your schema, run with a data directory mount.
The client surface to this library is pretty much just the procedural macro [graphqlschemafrom_file].
```rust use confql::graphqlschema; use indoc::indoc; use juniper::{graphqlvalue, EmptyMutation, EmptySubscription}; use test_files::TestFiles;
// In practice you'll more likely use the graphql_schema_from_file
macro
// but this macro is nice for tests.
graphql_schema!{
type Alien {
name: String! @confql(arrayIdentifier: true)
size: Float!
}
type Query {
customers: [Alien!]!
}
schema {
query: Query
}
};
// We have some types generated to play with
let mork = Alien { name: "Mork".tostring(), size: 12.0 };
// And juniper can execute, resolving against files
// Assemble some demo data on the filesystem let mocks = TestFiles::new(); mocks.file( "customers/Paul.yml", indoc! {" --- size: 9.5 "}, );
// The Ctx
struct has been generated for us, implementing
// juniper::Context
. All it needs to initialize is a PathBuf
// pointing at the root of the data directory.
let ctx = Ctx::from(mocks.path().topathbuf());
// Run the executor. let (res, errors) = juniper::executesync( indoc!{" query { customers { name size } } "}, None, &Schema::new(Query, EmptyMutation::new(), EmptySubscription::new()), &juniper::Variables::new(), &ctx, ) .unwrap();
// Ensure the value matches. asserteq!( res, graphqlvalue!({ "customers": [ { "name": "Paul", "size": 9.5 } ] }) ); ```
Current version: 0.5.0
License: MIT