Remove async-graphql-derive dependency on graphql-parser.
This commit is contained in:
parent
f7d308be8a
commit
52170b6da3
@ -16,8 +16,8 @@ categories = ["network-programming", "asynchronous"]
|
|||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
async-graphql-parser = { path = "../async-graphql-parser", version = "0.1.0" }
|
||||||
proc-macro2 = "1.0.6"
|
proc-macro2 = "1.0.6"
|
||||||
syn = { version = "1.0.13", features = ["full"] }
|
syn = { version = "1.0.13", features = ["full"] }
|
||||||
quote = "1.0.3"
|
quote = "1.0.3"
|
||||||
graphql-parser = "0.2.3"
|
|
||||||
Inflector = "0.11.4"
|
Inflector = "0.11.4"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::utils::{parse_guards, parse_validator, parse_value};
|
use crate::utils::{parse_guards, parse_validator};
|
||||||
use graphql_parser::query::Value;
|
use async_graphql_parser::{parse_value, Value};
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
use syn::{Attribute, AttributeArgs, Error, Lit, Meta, MetaList, NestedMeta, Result, Type};
|
use syn::{Attribute, AttributeArgs, Error, Lit, Meta, MetaList, NestedMeta, Result, Type};
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use graphql_parser::parse_query;
|
use async_graphql_parser::Value;
|
||||||
use graphql_parser::query::{Definition, OperationDefinition, ParseError, Query, Value};
|
|
||||||
use proc_macro2::{Span, TokenStream};
|
use proc_macro2::{Span, TokenStream};
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
use syn::{Error, Expr, Ident, Lit, Meta, MetaList, NestedMeta, Result};
|
use syn::{Error, Expr, Ident, Lit, Meta, MetaList, NestedMeta, Result};
|
||||||
@ -13,27 +12,11 @@ pub fn get_crate_name(internal: bool) -> TokenStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse_value(s: &str) -> std::result::Result<Value, ParseError> {
|
|
||||||
let mut doc = parse_query(&format!("query ($a:Int!={}) {{ dummy }}", s))?;
|
|
||||||
let definition = doc.definitions.remove(0);
|
|
||||||
if let Definition::Operation(OperationDefinition::Query(Query {
|
|
||||||
mut variable_definitions,
|
|
||||||
..
|
|
||||||
})) = definition
|
|
||||||
{
|
|
||||||
let var = variable_definitions.remove(0);
|
|
||||||
Ok(var.default_value.unwrap())
|
|
||||||
} else {
|
|
||||||
unreachable!()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn build_value_repr(crate_name: &TokenStream, value: &Value) -> TokenStream {
|
pub fn build_value_repr(crate_name: &TokenStream, value: &Value) -> TokenStream {
|
||||||
match value {
|
match value {
|
||||||
Value::Variable(_) => unreachable!(),
|
Value::Variable(_) => unreachable!(),
|
||||||
Value::Int(n) => {
|
Value::Int(n) => {
|
||||||
let n = n.as_i64().unwrap();
|
quote! { #crate_name::Value::Int(#n) }
|
||||||
quote! { #crate_name::Value::Int((#n as i32).into()) }
|
|
||||||
}
|
}
|
||||||
Value::Float(n) => {
|
Value::Float(n) => {
|
||||||
quote! { #crate_name::Value::Float(#n) }
|
quote! { #crate_name::Value::Float(#n) }
|
||||||
|
@ -4,10 +4,10 @@ extern crate pest_derive;
|
|||||||
extern crate thiserror;
|
extern crate thiserror;
|
||||||
|
|
||||||
pub mod ast;
|
pub mod ast;
|
||||||
mod query_parser;
|
|
||||||
mod pos;
|
mod pos;
|
||||||
|
mod query_parser;
|
||||||
mod value;
|
mod value;
|
||||||
|
|
||||||
pub use query_parser::{parse_query, Error, Result};
|
|
||||||
pub use pos::{Pos, Positioned};
|
pub use pos::{Pos, Positioned};
|
||||||
|
pub use query_parser::{parse_query, parse_value, Error, Result};
|
||||||
pub use value::Value;
|
pub use value::Value;
|
||||||
|
@ -120,6 +120,15 @@ pub fn parse_query<T: AsRef<str>>(input: T) -> Result<Document> {
|
|||||||
Ok(Document { definitions })
|
Ok(Document { definitions })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parse a graphql value
|
||||||
|
pub fn parse_value<T: AsRef<str>>(input: T) -> Result<Value> {
|
||||||
|
let value_pair: Pair<Rule> = QueryParser::parse(Rule::value, input.as_ref())?
|
||||||
|
.next()
|
||||||
|
.unwrap();
|
||||||
|
let mut pc = PositionCalculator::new(input.as_ref());
|
||||||
|
parse_value2(value_pair, &mut pc)
|
||||||
|
}
|
||||||
|
|
||||||
fn parse_named_operation_definition(
|
fn parse_named_operation_definition(
|
||||||
pair: Pair<Rule>,
|
pair: Pair<Rule>,
|
||||||
pc: &mut PositionCalculator,
|
pc: &mut PositionCalculator,
|
||||||
@ -200,7 +209,7 @@ fn parse_named_operation_definition(
|
|||||||
fn parse_default_value(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Value> {
|
fn parse_default_value(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Value> {
|
||||||
for pair in pair.into_inner() {
|
for pair in pair.into_inner() {
|
||||||
match pair.as_rule() {
|
match pair.as_rule() {
|
||||||
Rule::value => return Ok(parse_value(pair, pc)?),
|
Rule::value => return Ok(parse_value2(pair, pc)?),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -313,7 +322,7 @@ fn parse_variable(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Posit
|
|||||||
unreachable!()
|
unreachable!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_value(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Value> {
|
fn parse_value2(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Value> {
|
||||||
let pair = pair.into_inner().next().unwrap();
|
let pair = pair.into_inner().next().unwrap();
|
||||||
Ok(match pair.as_rule() {
|
Ok(match pair.as_rule() {
|
||||||
Rule::object => parse_object_value(pair, pc)?,
|
Rule::object => parse_object_value(pair, pc)?,
|
||||||
@ -348,7 +357,7 @@ fn parse_object_pair(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<(S
|
|||||||
for pair in pair.into_inner() {
|
for pair in pair.into_inner() {
|
||||||
match pair.as_rule() {
|
match pair.as_rule() {
|
||||||
Rule::name => name = Some(pair.as_str().to_string()),
|
Rule::name => name = Some(pair.as_str().to_string()),
|
||||||
Rule::value => value = Some(parse_value(pair, pc)?),
|
Rule::value => value = Some(parse_value2(pair, pc)?),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,7 +382,7 @@ fn parse_array_value(pair: Pair<Rule>, pc: &mut PositionCalculator) -> Result<Va
|
|||||||
for pair in pair.into_inner() {
|
for pair in pair.into_inner() {
|
||||||
match pair.as_rule() {
|
match pair.as_rule() {
|
||||||
Rule::value => {
|
Rule::value => {
|
||||||
array.push(parse_value(pair, pc)?);
|
array.push(parse_value2(pair, pc)?);
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
@ -393,7 +402,7 @@ fn parse_pair(
|
|||||||
Rule::value => {
|
Rule::value => {
|
||||||
value = {
|
value = {
|
||||||
let pos = pc.step(&pair);
|
let pos = pc.step(&pair);
|
||||||
Some(Positioned::new(parse_value(pair, pc)?, pos))
|
Some(Positioned::new(parse_value2(pair, pc)?, pos))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
|
Loading…
Reference in New Issue
Block a user