weavatrix_parse/graphql/
mod.rs1use crate::contract_tokens::ContractTokens;
4use crate::facts::{Contract, ContractKind, Facts, GraphqlOperation, GraphqlType, ParseDiagnostic};
5use crate::syntax::Language;
6use crate::token::TokenKind;
7use std::collections::BTreeMap;
8
9#[must_use]
10pub fn extract(source: &str) -> Facts {
11 Parser::new(source).parse()
12}
13
14struct Parser<'source> {
15 tokens: ContractTokens<'source>,
16 roots: BTreeMap<String, GraphqlOperation>,
17 facts: Facts,
18}
19
20mod lifecycle;
21mod navigation;
22mod operations;
23mod schema;
24
25fn operation(value: &str) -> Option<GraphqlOperation> {
26 match value {
27 "query" => Some(GraphqlOperation::Query),
28 "mutation" => Some(GraphqlOperation::Mutation),
29 "subscription" => Some(GraphqlOperation::Subscription),
30 _ => None,
31 }
32}
33
34fn operation_name(operation: GraphqlOperation) -> &'static str {
35 match operation {
36 GraphqlOperation::Query => "query",
37 GraphqlOperation::Mutation => "mutation",
38 GraphqlOperation::Subscription => "subscription",
39 }
40}
41
42#[cfg(test)]
43mod tests;