Skip to main content

weavatrix_parse/graphql/
mod.rs

1//! Lossless GraphQL SDL and executable-document contract facts.
2
3use 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;