Skip to main content

wat_syntax/
helpers.rs

1#[derive(Clone, Debug, PartialEq, Eq, Hash)]
2/// Type that represents tree element which may be either a node or a token.
3pub enum NodeOrToken<N, T> {
4    Node(N),
5    Token(T),
6}
7impl<N, T> NodeOrToken<N, T> {
8    #[inline]
9    pub fn into_node(self) -> Option<N> {
10        if let NodeOrToken::Node(node) = self {
11            Some(node)
12        } else {
13            None
14        }
15    }
16    #[inline]
17    pub fn into_token(self) -> Option<T> {
18        if let NodeOrToken::Token(token) = self {
19            Some(token)
20        } else {
21            None
22        }
23    }
24    #[inline]
25    pub fn as_node(&self) -> Option<&N> {
26        if let NodeOrToken::Node(node) = self {
27            Some(node)
28        } else {
29            None
30        }
31    }
32    #[inline]
33    pub fn as_token(&self) -> Option<&T> {
34        if let NodeOrToken::Token(token) = self {
35            Some(token)
36        } else {
37            None
38        }
39    }
40}