Skip to content
This repository was archived by the owner on Oct 10, 2019. It is now read-only.

Commit 2835cbe

Browse files
authored
Merge pull request #9 from sfackler/syn-04
Upgrade to syn 0.12
2 parents 48928e7 + f428637 commit 2835cbe

File tree

8 files changed

+48
-43
lines changed

8 files changed

+48
-43
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ proc-macro = true
1313
test = false
1414

1515
[dependencies]
16-
syn = "0.11"
17-
quote = "0.3"
16+
syn = "0.12"
17+
quote = "0.4"
1818

1919
[dev-dependencies]
2020
postgres = "0.15.1"

src/accepts.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub fn enum_body(name: &str, variants: &[Variant]) -> Tokens {
3636

3737
pub fn composite_body(name: &str, trait_: &str, fields: &[Field]) -> Tokens {
3838
let num_fields = fields.len();
39-
let trait_ = Ident::new(trait_);
39+
let trait_ = Ident::from(trait_);
4040
let traits = iter::repeat(&trait_);
4141
let field_names = fields.iter().map(|f| &f.name);
4242
let field_types = fields.iter().map(|f| &f.type_);

src/composites.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use syn::{self, Ident, Ty};
1+
use syn::{self, Ident, Type};
22

33
use overrides::Overrides;
44

55
pub struct Field {
66
pub name: String,
77
pub ident: Ident,
8-
pub type_: Ty,
8+
pub type_: Type,
99
}
1010

1111
impl Field {

src/enums.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use syn::{self, Ident, VariantData};
1+
use syn::{self, Ident, Fields};
22

33
use overrides::Overrides;
44

@@ -9,8 +9,8 @@ pub struct Variant {
99

1010
impl Variant {
1111
pub fn parse(raw: &syn::Variant) -> Result<Variant, String> {
12-
match raw.data {
13-
VariantData::Unit => {}
12+
match raw.fields {
13+
Fields::Unit => {}
1414
_ => return Err("non-C-like enums are not supported".to_owned()),
1515
}
1616

src/fromsql.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
use std::iter;
2-
use syn::{self, Body, Ident, MacroInput, VariantData};
2+
use syn::{self, Ident, DeriveInput, Data, DataStruct, Fields};
33
use quote::Tokens;
44

55
use accepts;
66
use composites::Field;
77
use enums::Variant;
88
use overrides::Overrides;
99

10-
pub fn expand_derive_fromsql(input: &MacroInput) -> Result<String, String> {
10+
pub fn expand_derive_fromsql(input: DeriveInput) -> Result<Tokens, String> {
1111
let overrides = Overrides::extract(&input.attrs)?;
1212

1313
let name = overrides.name.unwrap_or_else(|| input.ident.to_string());
1414

15-
let (accepts_body, to_sql_body) = match input.body {
16-
Body::Enum(ref variants) => {
17-
let variants = variants.iter().map(Variant::parse).collect::<Result<Vec<_>, _>>()?;
15+
let (accepts_body, to_sql_body) = match input.data {
16+
Data::Enum(ref data) => {
17+
let variants = data.variants.iter().map(Variant::parse).collect::<Result<Vec<_>, _>>()?;
1818
(accepts::enum_body(&name, &variants), enum_body(&input.ident, &variants))
1919
}
20-
Body::Struct(VariantData::Tuple(ref fields)) if fields.len() == 1 => {
21-
let field = &fields[0];
20+
Data::Struct(DataStruct { fields: Fields::Unnamed(ref fields), .. }) if fields.unnamed.len() == 1 => {
21+
let field = fields.unnamed.first().unwrap().into_value();
2222
(domain_accepts_body(field), domain_body(&input.ident, field))
2323
}
24-
Body::Struct(VariantData::Struct(ref fields)) => {
25-
let fields = fields.iter().map(Field::parse).collect::<Result<Vec<_>, _>>()?;
24+
Data::Struct(DataStruct { fields: Fields::Named(ref fields), .. }) => {
25+
let fields = fields.named.iter().map(Field::parse).collect::<Result<Vec<_>, _>>()?;
2626
(accepts::composite_body(&name, "FromSql", &fields),
2727
composite_body(&input.ident, &fields))
2828
}
@@ -50,7 +50,7 @@ pub fn expand_derive_fromsql(input: &MacroInput) -> Result<String, String> {
5050
}
5151
};
5252

53-
Ok(out.to_string())
53+
Ok(out)
5454
}
5555

5656
fn enum_body(ident: &Ident, variants: &[Variant]) -> Tokens {
@@ -86,7 +86,7 @@ fn domain_body(ident: &Ident, field: &syn::Field) -> Tokens {
8686
}
8787

8888
fn composite_body(ident: &Ident, fields: &[Field]) -> Tokens {
89-
let temp_vars = &fields.iter().map(|f| Ident::new(format!("__{}", f.ident))).collect::<Vec<_>>();
89+
let temp_vars = &fields.iter().map(|f| Ident::from(format!("__{}", f.ident))).collect::<Vec<_>>();
9090
let field_names = &fields.iter().map(|f| &f.name).collect::<Vec<_>>();
9191
let field_idents = &fields.iter().map(|f| &f.ident).collect::<Vec<_>>();
9292

src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ mod tosql;
1616

1717
#[proc_macro_derive(ToSql, attributes(postgres))]
1818
pub fn derive_tosql(input: TokenStream) -> TokenStream {
19-
let input = syn::parse_macro_input(&input.to_string()).unwrap();
20-
tosql::expand_derive_tosql(&input).unwrap().parse().unwrap()
19+
let input = syn::parse(input).unwrap();
20+
tosql::expand_derive_tosql(input).unwrap().into()
2121
}
2222

2323
#[proc_macro_derive(FromSql, attributes(postgres))]
2424
pub fn derive_fromsql(input: TokenStream) -> TokenStream {
25-
let input = syn::parse_macro_input(&input.to_string()).unwrap();
26-
fromsql::expand_derive_fromsql(&input).unwrap().parse().unwrap()
25+
let input = syn::parse(input).unwrap();
26+
fromsql::expand_derive_fromsql(input).unwrap().into()
2727
}

src/overrides.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use syn::{Attribute, MetaItem, NestedMetaItem, Lit};
1+
use syn::{Attribute, Meta, NestedMeta, Lit};
22

33
pub struct Overrides {
44
pub name: Option<String>,
@@ -11,24 +11,29 @@ impl Overrides {
1111
};
1212

1313
for attr in attrs {
14-
if attr.value.name() != "postgres" {
14+
let attr = match attr.interpret_meta() {
15+
Some(meta) => meta,
16+
None => continue,
17+
};
18+
19+
if attr.name() != "postgres" {
1520
continue;
1621
}
1722

18-
let list = match attr.value {
19-
MetaItem::List(_, ref list) => list,
23+
let list = match attr {
24+
Meta::List(ref list) => list,
2025
_ => return Err("expected a #[postgres(...)]".to_owned()),
2126
};
2227

23-
for item in list {
28+
for item in &list.nested {
2429
match *item {
25-
NestedMetaItem::MetaItem(MetaItem::NameValue(ref name, ref value)) => {
26-
if name != "name" {
27-
return Err(format!("unknown override `{}`", name));
30+
NestedMeta::Meta(Meta::NameValue(ref meta)) => {
31+
if meta.ident.as_ref() != "name" {
32+
return Err(format!("unknown override `{}`", meta.ident.as_ref()));
2833
}
2934

30-
let value = match *value {
31-
Lit::Str(ref s, _) => s.to_owned(),
35+
let value = match meta.lit {
36+
Lit::Str(ref s) => s.value(),
3237
_ => return Err("expected a string literal".to_owned()),
3338
};
3439

src/tosql.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
use std::iter;
2-
use syn::{self, Body, Ident, MacroInput, VariantData};
2+
use syn::{self, Ident, DeriveInput, Data, DataStruct, Fields};
33
use quote::Tokens;
44

55
use accepts;
66
use composites::Field;
77
use enums::Variant;
88
use overrides::Overrides;
99

10-
pub fn expand_derive_tosql(input: &MacroInput) -> Result<String, String> {
10+
pub fn expand_derive_tosql(input: DeriveInput) -> Result<Tokens, String> {
1111
let overrides = Overrides::extract(&input.attrs)?;
1212

1313
let name = overrides.name.unwrap_or_else(|| input.ident.to_string());
1414

15-
let (accepts_body, to_sql_body) = match input.body {
16-
Body::Enum(ref variants) => {
17-
let variants = variants.iter().map(Variant::parse).collect::<Result<Vec<_>, _>>()?;
15+
let (accepts_body, to_sql_body) = match input.data {
16+
Data::Enum(ref data) => {
17+
let variants = data.variants.iter().map(Variant::parse).collect::<Result<Vec<_>, _>>()?;
1818
(accepts::enum_body(&name, &variants), enum_body(&input.ident, &variants))
1919
}
20-
Body::Struct(VariantData::Tuple(ref fields)) if fields.len() == 1 => {
21-
let field = &fields[0];
20+
Data::Struct(DataStruct { fields: Fields::Unnamed(ref fields), .. }) if fields.unnamed.len() == 1 => {
21+
let field = fields.unnamed.first().unwrap().into_value();
2222
(domain_accepts_body(&name, &field), domain_body())
2323
}
24-
Body::Struct(VariantData::Struct(ref fields)) => {
25-
let fields = fields.iter().map(Field::parse).collect::<Result<Vec<_>, _>>()?;
24+
Data::Struct(DataStruct { fields: Fields::Named(ref fields), .. }) => {
25+
let fields = fields.named.iter().map(Field::parse).collect::<Result<Vec<_>, _>>()?;
2626
(accepts::composite_body(&name, "ToSql", &fields),
2727
composite_body(&fields))
2828
}
@@ -53,7 +53,7 @@ pub fn expand_derive_tosql(input: &MacroInput) -> Result<String, String> {
5353
}
5454
};
5555

56-
Ok(out.to_string())
56+
Ok(out)
5757
}
5858

5959
fn enum_body(ident: &Ident, variants: &[Variant]) -> Tokens {

0 commit comments

Comments
 (0)