Rocket

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit c04655f290c25055d4e3011be0034a2e5d3acbd0
parent 706cd320539c79aea0f7c8b51726dad088fcf7f4
Author: Sergio Benitez <sb@sergio.bz>
Date:   Fri, 27 Jul 2018 21:03:33 -0700

Remove unnecessary code in codegen_next.

Diffstat:
Dcore/codegen_next/src/codegen_ext.rs | 101-------------------------------------------------------------------------------
Mcore/codegen_next/src/ext.rs | 15---------------
Mcore/codegen_next/src/lib.rs | 9+--------
3 files changed, 1 insertion(+), 124 deletions(-)

diff --git a/core/codegen_next/src/codegen_ext.rs b/core/codegen_next/src/codegen_ext.rs @@ -1,101 +0,0 @@ -use syn::*; -use ext::*; -use proc_macro2::TokenStream; -use spanned::Spanned; - -use FieldMember; - -pub trait CodegenFieldsExt { - fn surround(&self, tokens: TokenStream) -> TokenStream; - fn ignore_tokens(&self) -> TokenStream; - fn id_match_tokens(&self) -> TokenStream; -} - -pub fn field_to_ident(i: usize, field: &Field) -> Ident { - let name = match field.ident { - Some(ref id) => format!("_{}", id), - None => format!("_{}", i) - }; - - Ident::new(&name, field.span().into()) -} - -pub fn field_to_match((i, field): (usize, &Field)) -> TokenStream { - let ident = field_to_ident(i, field); - match field.ident { - Some(ref id) => quote!(#id: #ident), - None => quote!(#ident) - } -} - -impl CodegenFieldsExt for Fields { - fn surround(&self, tokens: TokenStream) -> TokenStream { - match *self { - Fields::Named(..) => quote!({ #tokens }), - Fields::Unnamed(..) => quote!(( #tokens )), - Fields::Unit => quote!() - } - } - - fn ignore_tokens(&self) -> TokenStream { - self.surround(quote!(..)) - } - - fn id_match_tokens(&self) -> TokenStream { - let idents = self.iter() - .enumerate() - .map(field_to_match); - - self.surround(quote!(#(#idents),*)) - } -} - -pub trait TokenStreamExt { - fn tokens(&self) -> TokenStream; -} - -impl<'f> TokenStreamExt for FieldMember<'f> { - fn tokens(&self) -> TokenStream { - let index = self.member.unnamed().map(|i| i.index).unwrap_or(0); - let ident = field_to_ident(index as usize, &self.field); - quote!(#ident) - } -} - -// use rocket::http::{ContentType, MediaType, Status}; - -// impl TokenStreamExt for ContentType { -// fn tokens(&self) -> TokenStream { -// let mt_tokens = self.0.tokens(); -// quote!(rocket::http::ContentType(#mt_tokens)) -// } -// } - -// impl TokenStreamExt for MediaType { -// fn tokens(&self) -> TokenStream { -// let (top, sub) = (self.top().as_str(), self.sub().as_str()); -// let (keys, values) = (self.params().map(|(k, _)| k), self.params().map(|(_, v)| v)); -// quote!(rocket::http::MediaType { -// source: rocket::http::Source::None, -// top: rocket::http::IndexedStr::Concrete( -// std::borrow::Cow::Borrowed(#top) -// ), -// sub: rocket::http::IndexedStr::Concrete( -// std::borrow::Cow::Borrowed(#sub) -// ), -// params: rocket::http::MediaParams::Static(&[ -// #(( -// rocket::http::IndexedStr::Concrete(std::borrow::Cow::Borrowed(#keys)), -// rocket::http::IndexedStr::Concrete(std::borrow::Cow::Borrowed(#values)) -// )),* -// ]) -// }) -// } -// } - -// impl TokenStreamExt for Status { -// fn tokens(&self) -> TokenStream { -// let (code, reason) = (self.code, self.reason); -// quote!(rocket::http::Status { code: #code, reason: #reason }) -// } -// } diff --git a/core/codegen_next/src/ext.rs b/core/codegen_next/src/ext.rs @@ -1,6 +1,4 @@ use syn::*; -use FieldMember; -use spanned::Spanned; pub trait MemberExt { fn named(&self) -> Option<&Ident>; @@ -33,7 +31,6 @@ pub(crate) trait FieldsExt { fn is_unit(&self) -> bool; fn nth(&self, i: usize) -> Option<&Field>; fn find_member(&self, member: &Member) -> Option<&Field>; - fn to_field_members<'f>(&'f self) -> Box<Iterator<Item = FieldMember<'f>> + 'f>; } impl FieldsExt for Fields { @@ -78,18 +75,6 @@ impl FieldsExt for Fields { } } - fn to_field_members<'f>(&'f self) -> Box<Iterator<Item = FieldMember<'f>> + 'f> { - Box::new(self.iter().enumerate().map(|(index, field)| { - if let Some(ref ident) = field.ident { - FieldMember { field, member: Member::Named(ident.clone()) } - } else { - let index = Index { index: index as u32, span: field.span().into() }; - let member = Member::Unnamed(index); - FieldMember { field, member } - } - })) - } - fn nth(&self, i: usize) -> Option<&Field> { match *self { Fields::Named(ref fields) => fields.named.iter().nth(i), diff --git a/core/codegen_next/src/lib.rs b/core/codegen_next/src/lib.rs @@ -10,7 +10,6 @@ extern crate proc_macro2; mod parser; mod spanned; mod ext; -mod codegen_ext; use parser::Result as PResult; use proc_macro::{Span, TokenStream}; @@ -24,12 +23,6 @@ const NO_GENERICS: &str = "enums with generics cannot derive `FromFormValue`"; const ONLY_ENUMS: &str = "`FromFormValue` can only be derived for enums"; const EMPTY_ENUM_WARN: &str = "deriving `FromFormValue` for empty enum"; -#[derive(Debug, Clone)] -pub(crate) struct FieldMember<'f> { - field: &'f Field, - member: Member -} - fn validate_input(input: DeriveInput) -> PResult<DataEnum> { // This derive doesn't support generics. Error out if there are generics. if !input.generics.params.is_empty() { @@ -67,7 +60,7 @@ fn real_derive_from_form_value(input: TokenStream) -> PResult<TokenStream> { // Create iterators over the identifers as idents and as strings. let variant_strs = enum_data.variants.iter().map(|v| v.ident.to_string()); - let variant_idents = enum_data.variants.iter().map(|v| v.ident.clone()); + let variant_idents = enum_data.variants.iter().map(|v| &v.ident); let names = ::std::iter::repeat(&name); // Generate the implementation.