Skip to content

Commit 3dedcc1

Browse files
committed
feat: update deps, move to syn v2
1 parent e71f9d6 commit 3dedcc1

File tree

5 files changed

+32
-64
lines changed

5 files changed

+32
-64
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
### Added
1111
- derive: support `serde::skip_deserializing` ([#83]).
1212

13+
### Changed
14+
- derive: move to syn v2.
15+
1316
[#83]: https://github.com/loyd/clickhouse.rs/pull/83
1417

1518
## [0.11.6] - 2023-09-27

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ hyper-tls = { version = "0.5.0", optional = true }
5858
url = "2.1.1"
5959
futures = "0.3.5"
6060
static_assertions = "1.1"
61-
sealed = "0.4"
61+
sealed = "0.5"
6262
sha-1 = { version = "0.10", optional = true }
6363
serde_json = { version = "1.0.68", optional = true }
6464
lz4 = { version = "1.23.3", optional = true }
@@ -68,7 +68,7 @@ time = { version = "0.3", optional = true }
6868
bstr = { version = "1.2", default-features = false }
6969

7070
[dev-dependencies]
71-
criterion = "0.4.0"
71+
criterion = "0.5.0"
7272
serde = { version = "1.0.106", features = ["derive"] }
7373
tokio = { version = "1.0.1", features = ["full", "test-util"] }
7474
hyper = { version = "0.14", features = ["client", "tcp", "http1", "stream", "server"] }

derive/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ proc-macro = true
1111

1212
[dependencies]
1313
proc-macro2 = "1.0"
14-
syn = "1.0"
14+
syn = "2.0"
1515
quote = "1.0"
16-
serde_derive_internals = "0.26"
16+
serde_derive_internals = "0.29"

derive/src/lib.rs

+9-60
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,10 @@
11
use proc_macro2::TokenStream;
22
use quote::quote;
3-
use serde_derive_internals::{attr::get_serde_meta_items, Ctxt};
4-
use syn::{parse_macro_input, Data, DataStruct, DeriveInput, Fields, Ident, Lit, Meta, NestedMeta};
5-
6-
/// Parses `#[serde(skip_serializing)]` and `#[serde(skip_deserializing)]`
7-
fn serde_skipped(cx: &Ctxt, attrs: &[syn::Attribute]) -> bool {
8-
for meta_items in attrs
9-
.iter()
10-
.filter_map(|attr| get_serde_meta_items(cx, attr).ok())
11-
{
12-
for meta_item in meta_items {
13-
match meta_item {
14-
NestedMeta::Meta(Meta::Path(path))
15-
if path
16-
.get_ident()
17-
// will not work with skip_serializing_if
18-
.map_or(false, |i| *i == "skip_serializing" || *i == "skip_deserializing") =>
19-
{
20-
return true
21-
}
22-
_ => continue,
23-
}
24-
}
25-
}
26-
false
27-
}
28-
29-
/// Parses `#[serde(rename = "..")]`
30-
fn serde_rename(cx: &Ctxt, field: &syn::Field) -> Option<String> {
31-
for meta_items in field
32-
.attrs
33-
.iter()
34-
.filter_map(|attr| get_serde_meta_items(cx, attr).ok())
35-
{
36-
for meta_item in meta_items {
37-
match meta_item {
38-
NestedMeta::Meta(Meta::NameValue(nv))
39-
if nv
40-
.path
41-
.get_ident()
42-
.map_or(false, |i| *i == "rename") =>
43-
{
44-
if let Lit::Str(lit) = nv.lit {
45-
return Some(lit.value());
46-
}
47-
}
48-
_ => continue,
49-
}
50-
}
51-
}
52-
None
53-
}
54-
55-
fn unraw(ident: &Ident) -> String {
56-
ident.to_string().trim_start_matches("r#").to_owned()
57-
}
3+
use serde_derive_internals::{
4+
attr::{Default as SerdeDefault, Field},
5+
Ctxt,
6+
};
7+
use syn::{parse_macro_input, Data, DataStruct, DeriveInput, Fields};
588

599
fn column_names(data: &DataStruct) -> TokenStream {
6010
match &data.fields {
@@ -63,11 +13,10 @@ fn column_names(data: &DataStruct) -> TokenStream {
6313
let column_names_iter = fields
6414
.named
6515
.iter()
66-
.filter(|f| !serde_skipped(&cx, &f.attrs))
67-
.map(|f| match serde_rename(&cx, f) {
68-
Some(name) => name,
69-
None => unraw(f.ident.as_ref().unwrap()),
70-
});
16+
.enumerate()
17+
.map(|(index, field)| Field::from_ast(&cx, index, field, None, &SerdeDefault::None))
18+
.filter(|field| !field.skip_serializing() && !field.skip_deserializing())
19+
.map(|field| field.name().serialize_name().to_string());
7120

7221
let tokens = quote! {
7322
&[#( #column_names_iter,)*]

src/row.rs

+16
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ pub trait Row {
44
const COLUMN_NAMES: &'static [&'static str];
55

66
// TODO: count
7+
// TODO: different list for SELECT/INSERT (de/ser)
78
}
89

910
// Actually, it's not public now.
@@ -138,6 +139,21 @@ mod tests {
138139
assert_eq!(join_column_names::<TopLevel>().unwrap(), "`one`");
139140
}
140141

142+
#[test]
143+
fn it_skips_deserializing() {
144+
use serde::Deserialize;
145+
146+
#[derive(Row, Deserialize)]
147+
#[allow(dead_code)]
148+
struct TopLevel {
149+
one: u32,
150+
#[serde(skip_deserializing)]
151+
two: u32,
152+
}
153+
154+
assert_eq!(join_column_names::<TopLevel>().unwrap(), "`one`");
155+
}
156+
141157
#[test]
142158
fn it_rejects_other() {
143159
#[derive(Row)]

0 commit comments

Comments
 (0)