2019-01-31 04:40:05 -06:00
|
|
|
use smol_str::SmolStr;
|
2019-01-30 14:02:27 -06:00
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub enum TokenTree {
|
2019-01-30 14:02:27 -06:00
|
|
|
Leaf(Leaf),
|
|
|
|
Subtree(Subtree),
|
|
|
|
}
|
2019-01-30 14:58:52 -06:00
|
|
|
impl_froms!(TokenTree: Leaf, Subtree);
|
2019-01-30 14:02:27 -06:00
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub enum Leaf {
|
2019-01-30 14:02:27 -06:00
|
|
|
Literal(Literal),
|
|
|
|
Punct(Punct),
|
|
|
|
Ident(Ident),
|
|
|
|
}
|
2019-01-30 14:58:52 -06:00
|
|
|
impl_froms!(Leaf: Literal, Punct, Ident);
|
2019-01-30 14:02:27 -06:00
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub struct Subtree {
|
|
|
|
pub delimiter: Delimiter,
|
|
|
|
pub token_trees: Vec<TokenTree>,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|
|
|
|
|
2019-01-31 04:32:40 -06:00
|
|
|
#[derive(Clone, Copy, Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub enum Delimiter {
|
2019-01-30 14:02:27 -06:00
|
|
|
Parenthesis,
|
|
|
|
Brace,
|
|
|
|
Bracket,
|
|
|
|
None,
|
|
|
|
}
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub struct Literal {
|
|
|
|
pub text: SmolStr,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub struct Punct {
|
|
|
|
pub char: char,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|
|
|
|
|
2019-01-31 02:09:19 -06:00
|
|
|
#[derive(Debug)]
|
2019-01-31 04:40:05 -06:00
|
|
|
pub struct Ident {
|
|
|
|
pub text: SmolStr,
|
2019-01-30 14:02:27 -06:00
|
|
|
}
|