Split parsing and generation into separate modules.

This commit is contained in:
Jimmy Cuadra 2019-06-18 16:59:48 -07:00
parent 65bd8e86cc
commit 48d6ef7ead
3 changed files with 32 additions and 26 deletions

27
src/gen.rs Normal file
View File

@ -0,0 +1,27 @@
//! Details of generating code for the `ruma_event` procedural macro.
use proc_macro2::TokenStream;
use quote::{quote, ToTokens};
use crate::parse::RumaEventInput;
/// The result of processing the `ruma_event` macro, ready for output back to source code.
pub struct RumaEvent;
impl From<RumaEventInput> for RumaEvent {
// TODO: Provide an actual impl for this.
fn from(_input: RumaEventInput) -> Self {
Self
}
}
impl ToTokens for RumaEvent {
// TODO: Provide an actual impl for this.
fn to_tokens(&self, tokens: &mut TokenStream) {
let output = quote!(
pub struct Foo {}
);
output.to_tokens(tokens);
}
}

View File

@ -34,9 +34,10 @@ extern crate proc_macro;
use proc_macro::TokenStream;
use quote::ToTokens;
use crate::event::{RumaEvent, RumaEventInput};
use crate::{gen::RumaEvent, parse::RumaEventInput};
mod event;
mod gen;
mod parse;
// A note about the `example` modules that appears in doctests:
//

View File

@ -1,8 +1,7 @@
//! Details of the `ruma_event` procedural macro.
//! Details of parsing input for the `ruma_event` procedural macro.
use proc_macro2::{Span, TokenStream};
use proc_macro2::Span;
use quote::{quote, ToTokens};
use syn::{
braced,
parse::{self, Parse, ParseStream},
@ -12,27 +11,6 @@ use syn::{
TypePath,
};
/// The result of processing the `ruma_event` macro, ready for output back to source code.
pub struct RumaEvent;
impl From<RumaEventInput> for RumaEvent {
// TODO: Provide an actual impl for this.
fn from(_input: RumaEventInput) -> Self {
Self
}
}
impl ToTokens for RumaEvent {
// TODO: Provide an actual impl for this.
fn to_tokens(&self, tokens: &mut TokenStream) {
let output = quote!(
pub struct Foo {}
);
output.to_tokens(tokens);
}
}
/// The entire `ruma_event!` macro structure directly as it appears in the source code..
pub struct RumaEventInput {
/// Outer attributes on the field, such as a docstring.