Remove parse module.

This commit is contained in:
Jimmy Cuadra 2018-05-04 18:52:09 -07:00
parent 4c46df9a59
commit 2a84e038c4
3 changed files with 2 additions and 150 deletions

View File

@ -7,7 +7,6 @@ mod metadata;
mod request; mod request;
mod response; mod response;
// use parse::Entry;
use self::metadata::Metadata; use self::metadata::Metadata;
use self::request::Request; use self::request::Request;
use self::response::Response; use self::response::Response;

View File

@ -21,7 +21,6 @@ use quote::{ToTokens, Tokens};
use api::{Api, Exprs}; use api::{Api, Exprs};
mod api; mod api;
// mod parse;
/// Generates a `ruma_api::Endpoint` from a concise definition. /// Generates a `ruma_api::Endpoint` from a concise definition.
/// ///
@ -197,10 +196,8 @@ mod api;
#[proc_macro] #[proc_macro]
pub fn ruma_api(input: TokenStream) -> TokenStream { pub fn ruma_api(input: TokenStream) -> TokenStream {
let exprs: Exprs = syn::parse(input).expect("ruma_api! failed to parse input"); let exprs: Exprs = syn::parse(input).expect("ruma_api! failed to parse input");
let api = match Api::try_from(exprs.inner) {
Ok(api) => api, let api = Api::from(exprs.inner);
Err(error) => panic!("{}", error),
};
let mut tokens = Tokens::new(); let mut tokens = Tokens::new();

View File

@ -1,144 +0,0 @@
//! Implementation details of parsing proc macro input.
use syn::{
Attribute,
AttrStyle,
Expr,
Field,
Ident,
Meta,
NestedMeta,
Visibility,
};
// use syn::parse::{expr, ident, lit, ty};
// use synom::space::{block_comment, whitespace};
#[derive(Debug)]
pub enum Entry {
Metadata(Vec<(Ident, Expr)>),
Request(Vec<Field>),
Response(Vec<Field>),
}
named!(pub parse_entries -> Vec<Entry>, do_parse!(
entries: many0!(entry) >>
(entries)
));
named!(entry -> Entry, alt!(
do_parse!(
block_type: syn!(Ident) >>
cond_reduce!(block_type == "metadata") >>
brace_and_fields: braces!(many0!(struct_init_field)) >>
(Entry::Metadata(brace_and_fields.1))
)
|
do_parse!(
block_type: syn!(Ident) >>
cond_reduce!(block_type == "request") >>
brace_and_fields: braces!(terminated_list!(punct!(","), struct_field)) >>
(Entry::Request(brace_and_fields.1))
)
|
do_parse!(
block_type: syn!(Ident) >>
cond_reduce!(block_type == "response") >>
brace_and_fields: braces!(terminated_list!(punct!(","), struct_field)) >>
(Entry::Response(brace_and_fields.1))
)
));
// Everything below copy/pasted from syn 0.11.11.
named!(struct_init_field -> (Ident, Expr), do_parse!(
ident: ident >>
punct!(:) >>
expr: expr >>
punct!(,) >>
(ident, expr)
));
named!(struct_field -> Field, do_parse!(
attrs: many0!(outer_attr) >>
visibility >>
id: ident >>
punct!(:) >>
ty: ty >>
(Field {
ident: Some(id),
vis: Visibility::Public, // Ignore declared visibility, always make fields public
attrs: attrs,
ty: ty,
})
));
named!(outer_attr -> Attribute, alt!(
do_parse!(
punct!(#) >>
brackets_and_meta_item: brackets!(meta_item) >>
(Attribute {
style: AttrStyle::Outer,
value: brackets_and_meta_item.1,
is_sugared_doc: false,
})
)
|
do_parse!(
punct!(/) >>
punct!(/) >>
punct!(/) >>
not!(tag!("/")) >>
content: take_until!("\n") >>
(Attribute {
style: AttrStyle::Outer,
value: Meta::NameValue(
"doc".into(),
format!("///{}", content).into(),
),
is_sugared_doc: true,
})
)
|
do_parse!(
option!(whitespace) >>
peek!(tuple!(tag!("/**"), not!(tag!("*")))) >>
com: block_comment >>
(Attribute {
style: AttrStyle::Outer,
value: Meta::NameValue(
"doc".into(),
com.into(),
),
is_sugared_doc: true,
})
)
));
named!(meta_item -> Meta, alt!(
do_parse!(
id: ident >>
parens_and_inner: parens!(terminated_list!(punct!(,), nested_meta_item)) >>
(Meta::List(id, parens_and_inner.1))
)
|
do_parse!(
name: ident >>
punct!(=) >>
value: lit >>
(Meta::NameValue(name, value))
)
|
map!(ident, Meta::Word)
));
named!(nested_meta_item -> NestedMeta, alt!(
meta_item => { NestedMeta::Meta }
|
lit => { NestedMeta::Literal }
));
named!(visibility -> Visibility, alt!(
keyword!(pub) => { |_| Visibility::Public }
|
epsilon!() => { |_| Visibility::Inherited }
));