1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


// these keywords are currently shared between

use std::str::FromStr;

#[derive(Debug, PartialEq)]
pub enum Keyword {
    As, // as
    True, // true
    False, // false
    Match, // match
    Type, // type
    Enum, // enum
    Directive, // directive
    Input, // input
    Message, // message
}

impl FromStr for Keyword {
    type Err = String;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "as" => Ok(Keyword::As), // first_name as email
            "true" => Ok(Keyword::True),
            "false" => Ok(Keyword::False),
            "match" => Ok(Keyword::Match),
            "type" => Ok(Keyword::Type),
            "enum" => Ok(Keyword::Enum),
            "directive" => Ok(Keyword::Directive),
            "input" => Ok(Keyword::Input),
            "message" => Ok(Keyword::Message),
            _ => Err(format!("unexpected keyword: {}", s)),
        }
    }
}