#graphql #idl #parser #format

graphql-idl-parser

GraphQL IDL格式的解析器

3个不稳定版本

使用旧的Rust 2015

0.1.1 2017年8月14日
0.1.0 2017年8月10日
0.0.1 2017年6月28日

#76 in #idl


用于 graphql-idl-parser-ffi

MIT 许可证

680KB
32K SLoC

graphql-idl-parser

GraphQL IDL文件的解析器!此存储库包含Rust实现和FFI dylib实现的代码,允许你在C项目(以及其他与C兼容的语言)中使用库。有关Ruby实现,请参阅https://github.com/gjtorikian/graphql-idl-parser-ruby

Build Status

为什么?

两个原因

  • 我在C中做Bison/LALR语法方面有很多经验,而且我迫切想学习一些Rust。
  • 很遗憾,大多数GraphQL工具似乎都是用JavaScript编写的。虽然这很酷,但我真的相信,当涉及到创建工具生态系统时,基础实现应该是一种可以被其他项目消费的语言。换句话说,世界不需要在Node、Ruby、Python、Java和Scala中拥有不同的GraphQL IDL解析器。基础格式应该是在类似C/C++/Rust的东西中,然后那些高级语言应该使用那个基础库。这确保了无论你的后端是用什么语言编写的,一致性都是正确的。

使用方法

将此添加到您的 Cargo.toml

[dependencies]
graphql-idl-parser = "^0.1"

并将其添加到您的crate根目录

extern crate graphql_idl_parser;

之后,只需将GraphQL IDL字符串输入到 gqlidl::parse_schema,例如

let definitions = gqlidl::parse_schema(contents.as_str()).unwrap();
for def in definitions {
  // ...
}

请注意,此库不会验证您的IDL格式。例如,如果您有多个具有相同名称的类型,它们将愉快地被消费为唯一的类型。然而,如果解析器遇到格式不正确或未知令牌,它将变得愤怒。

待办事项

  • 更多的文档?
  • 支持IDL的其他部分,而不仅仅是类型

依赖项

~3–4.5MB
~92K SLoC