Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates for latest nightly #647

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions codegen_next/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ license = "MIT/Apache-2.0"
proc-macro = true

[dependencies]
quote = "0.5.1"
proc-macro2 = { version = "0.3.6", features = ["nightly"] }
syn = { version = "0.13.1", features = ["full", "extra-traits"] }
quote = "0.6.1"
proc-macro2 = { version = "0.4.3", features = ["nightly"] }
syn = { version = "0.14.0", features = ["full", "extra-traits"] }
40 changes: 20 additions & 20 deletions codegen_next/src/codegen_ext.rs
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
use syn::*;
use ext::*;
use quote::Tokens;
use proc_macro2::TokenStream;
use spanned::Spanned;

use FieldMember;

pub trait CodegenFieldsExt {
fn surround(&self, tokens: Tokens) -> Tokens;
fn ignore_tokens(&self) -> Tokens;
fn id_match_tokens(&self) -> Tokens;
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(id) => format!("_{}", id),
Some(ref id) => format!("_{}", id),
None => format!("_{}", i)
};

Ident::new(&name, field.span().into())
}

pub fn field_to_match((i, field): (usize, &Field)) -> Tokens {
pub fn field_to_match((i, field): (usize, &Field)) -> TokenStream {
let ident = field_to_ident(i, field);
match field.ident {
Some(id) => quote!(#id: #ident),
Some(ref id) => quote!(#id: #ident),
None => quote!(#ident)
}
}

impl CodegenFieldsExt for Fields {
fn surround(&self, tokens: Tokens) -> Tokens {
fn surround(&self, tokens: TokenStream) -> TokenStream {
match *self {
Fields::Named(..) => quote!({ #tokens }),
Fields::Unnamed(..) => quote!(( #tokens )),
Fields::Unit => quote!()
}
}

fn ignore_tokens(&self) -> Tokens {
fn ignore_tokens(&self) -> TokenStream {
self.surround(quote!(..))
}

fn id_match_tokens(&self) -> Tokens {
fn id_match_tokens(&self) -> TokenStream {
let idents = self.iter()
.enumerate()
.map(field_to_match);
Expand All @@ -50,12 +50,12 @@ impl CodegenFieldsExt for Fields {
}
}

pub trait TokensExt {
fn tokens(&self) -> Tokens;
pub trait TokenStreamExt {
fn tokens(&self) -> TokenStream;
}

impl<'f> TokensExt for FieldMember<'f> {
fn tokens(&self) -> Tokens {
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)
Expand All @@ -64,15 +64,15 @@ impl<'f> TokensExt for FieldMember<'f> {

// use rocket::http::{ContentType, MediaType, Status};

// impl TokensExt for ContentType {
// fn tokens(&self) -> Tokens {
// impl TokenStreamExt for ContentType {
// fn tokens(&self) -> TokenStream {
// let mt_tokens = self.0.tokens();
// quote!(rocket::http::ContentType(#mt_tokens))
// }
// }

// impl TokensExt for MediaType {
// fn tokens(&self) -> 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 {
Expand All @@ -93,8 +93,8 @@ impl<'f> TokensExt for FieldMember<'f> {
// }
// }

// impl TokensExt for Status {
// fn tokens(&self) -> Tokens {
// impl TokenStreamExt for Status {
// fn tokens(&self) -> TokenStream {
// let (code, reason) = (self.code, self.reason);
// quote!(rocket::http::Status { code: #code, reason: #reason })
// }
Expand Down
4 changes: 2 additions & 2 deletions codegen_next/src/ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ 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(ident) = field.ident {
FieldMember { field, member: Member::Named(ident) }
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);
Expand Down
8 changes: 4 additions & 4 deletions codegen_next/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,13 @@ fn real_derive_from_form_value(input: TokenStream) -> PResult<TokenStream> {
})?;

// Validate the enum.
let name = input.ident;
let name = input.ident.clone();
let enum_data = validate_input(input)?;

// Create iterators over the identifers as idents and as strings.
let variant_strs = enum_data.variants.iter().map(|v| v.ident.as_ref() as &str);
let variant_idents = enum_data.variants.iter().map(|v| v.ident);
let names = ::std::iter::repeat(name);
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 names = ::std::iter::repeat(&name);

// Generate the implementation.
Ok(quote! {
Expand Down
7 changes: 2 additions & 5 deletions codegen_next/src/spanned.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use proc_macro::Span;

use proc_macro2::TokenStream;
use quote::{Tokens, ToTokens};
use quote::ToTokens;

pub trait Spanned {
fn span(&self) -> Span;
Expand All @@ -10,9 +9,7 @@ pub trait Spanned {
// FIXME: Remove this once proc_macro's stabilize.
impl<T: ToTokens> Spanned for T {
fn span(&self) -> Span {
let mut tokens = Tokens::new();
self.to_tokens(&mut tokens);
let token_stream = TokenStream::from(tokens);
let token_stream = self.into_token_stream();
let mut iter = token_stream.into_iter();
let mut span = match iter.next() {
Some(tt) => tt.span().unstable(),
Expand Down
2 changes: 1 addition & 1 deletion examples/todo/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ rocket_codegen = { path = "../../codegen" }
serde = "1.0"
serde_json = "1.0"
serde_derive = "1.0"
diesel = { version = "1.1", features = ["sqlite", "r2d2"] }
diesel = { version = "1.2.*", features = ["sqlite", "r2d2"] }

[dev-dependencies]
parking_lot = {version = "0.5", features = ["nightly"]}
Expand Down
4 changes: 2 additions & 2 deletions lib/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ time = "0.1"
memchr = "2"
base64 = "0.9"
smallvec = "0.6"
pear = { git = "http://github.com/SergioBenitez/pear", rev = "44bbca0" }
pear_codegen = { git = "http://github.com/SergioBenitez/pear", rev = "44bbca0" }
pear = { git = "http://github.com/SergioBenitez/pear", rev = "a96a7fd" }
pear_codegen = { git = "http://github.com/SergioBenitez/pear", rev = "a96a7fd" }
rustls = { version = "0.12.0", optional = true }
hyper = { version = "0.10.13", default-features = false }
indexmap = "1.0"
Expand Down
4 changes: 2 additions & 2 deletions lib/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ use yansi::Color::{Red, Yellow, Blue, White};
use version_check::{supports_features, is_min_version, is_min_date};

// Specifies the minimum nightly version needed to compile Rocket.
const MIN_DATE: &'static str = "2018-04-28";
const MIN_VERSION: &'static str = "1.27.0-nightly";
const MIN_DATE: &'static str = "2018-05-20";
const MIN_VERSION: &'static str = "1.28.0-nightly";

fn main() {
let ok_channel = supports_features();
Expand Down
2 changes: 1 addition & 1 deletion lib/src/http/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ impl<'h> HeaderMap<'h> {
pub fn iter<'s>(&'s self) -> impl Iterator<Item=Header<'s>> {
self.headers.iter().flat_map(|(key, values)| {
values.iter().map(move |val| {
Header::new(key.as_str(), val.borrow())
Header::new(key.as_str(), &**val)
})
})
}
Expand Down