summary refs log tree commit diff
path: root/modules/morgana_proc/src/lib.rs
blob: f4932d65b5241fc765dedc46f63cc5ab53b07ec1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
extern crate proc_macro;

use unsynn::*;

#[proc_macro]
pub fn morx(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    println!("{:?}", input);
    let ast: MorxBlock = unsynn::TokenStream::from(input).to_token_iter().parse_all().unwrap();

    LiteralString::from_str("test").to_token_stream().into()
}


unsynn! {
    struct MorxBlock(Any<Either<Literal, Box<MorxNode>>, Nothing>);
    struct MorxNode(Ident, MorxChildren);
    struct MorxAttr(Either<Ident, MorxComplexAttr>);
    struct MorxComplexAttr(Ident, Assign, AttrValue);
    struct AttrValue(Either<Ident, Literal, BracketGroup>);
    struct MorxChildren(Either<EndOfStream, Semicolon, BracketGroupContaining<Box<MorxBlock>>>);
}