bluejay-parser 0.3.1

A GraphQL parser
Documentation
use crate::{HasSpan, Span};
use enum_as_inner::EnumAsInner;

mod float_value;
mod int_value;
mod name;
mod punctuator;
mod string_value;
mod variable_name;
pub use float_value::FloatValue;
pub use int_value::IntValue;
pub use name::Name;
pub use punctuator::{Punctuator, PunctuatorType};
pub use string_value::StringValue;
pub use variable_name::Variable;

#[derive(PartialEq, Debug, EnumAsInner)]
pub enum LexicalToken<'a> {
    Punctuator(Punctuator),
    Name(Name<'a>),
    VariableName(Variable<'a>),
    IntValue(IntValue),
    FloatValue(FloatValue),
    StringValue(StringValue<'a>),
}

impl HasSpan for LexicalToken<'_> {
    fn span(&self) -> &Span {
        match self {
            Self::VariableName(f) => f.span(),
            Self::FloatValue(f) => f.span(),
            Self::IntValue(i) => i.span(),
            Self::StringValue(s) => s.span(),
            Self::Name(n) => n.span(),
            Self::Punctuator(p) => p.span(),
        }
    }
}

impl<'a> From<LexicalToken<'a>> for Span {
    fn from(value: LexicalToken<'a>) -> Self {
        match value {
            LexicalToken::VariableName(f) => f.into(),
            LexicalToken::FloatValue(f) => f.into(),
            LexicalToken::IntValue(i) => i.into(),
            LexicalToken::StringValue(s) => s.into(),
            LexicalToken::Name(n) => n.into(),
            LexicalToken::Punctuator(p) => p.into(),
        }
    }
}