cynic-parser 0.11.1

A fast, correct and easy to use GraphQL parser
Documentation
use crate::{
    Span,
    schema_coordinates::*,
};

grammar<'input>(input: &'input str);

pub SchemaCoordinate: SchemaCoordinate = {
    <inner:TypeCoordinate> => {
        SchemaCoordinate::Type(inner)
    },
    <inner:MemberCoordinate> => {
        SchemaCoordinate::Member(inner)
    },
    <inner:ArgumentCoordinate> => {
        SchemaCoordinate::Argument(inner)
    },
    <inner:DirectiveCoordinate> => {
        SchemaCoordinate::Directive(inner)
    },
    <inner:DirectiveArgumentCoordinate> => {
        SchemaCoordinate::DirectiveArgument(inner)
    },
}

TypeCoordinate: TypeCoordinate = {
    <name: Name> => {
        TypeCoordinate {
            name
        }
    }
}

MemberCoordinate: MemberCoordinate = {
    <ty: TypeCoordinate> "." <name:Name> => {
        MemberCoordinate {
            ty,
            name
        }
    }
}

ArgumentCoordinate: ArgumentCoordinate = {
    <member: MemberCoordinate> "(" <name:Name> ":" ")" => {
        ArgumentCoordinate {
            member,
            name
        }
    }
}

DirectiveCoordinate: DirectiveCoordinate = {
    <start:@L> "@" <name: Name> <end:@R> => {
        DirectiveCoordinate {
            span: Span::new(start, end),
            name
        }
    }
}

DirectiveArgumentCoordinate: DirectiveArgumentCoordinate = {
    <directive: DirectiveCoordinate> "(" <name:Name> ":" ")" => {
        DirectiveArgumentCoordinate {
            directive,
            name
        }
    }
}

Name: Name = {
    <start:@L> <ident:Ident> <end:@R> => Name {
        value: ident.into(),
        span: Span::new(start, end)
    }
}

extern {
    type Location = usize;
    type Error = crate::parser::AdditionalErrors;

    enum lexer::Token<'input> {
        ":" => lexer::Token::Colon,

        "(" => lexer::Token::OpenParen,
        ")" => lexer::Token::CloseParen,

        "@" => lexer::Token::At,
        "." => lexer::Token::Dot,

        Ident => lexer::Token::Identifier(<&'input str>),
    }
}