Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit385bf35

Browse files
authored
Merge pull request#841 from sfackler/fix-raw-idents
Fix handling of raw ident fields in derive
2 parents84fa5fa +dc591ff commit385bf35

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

‎postgres-derive-test/src/composites.rs‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,26 @@ fn wrong_type() {
215215
.unwrap_err();
216216
assert!(err.source().unwrap().is::<WrongType>());
217217
}
218+
219+
#[test]
220+
fnraw_ident_field(){
221+
#[derive(FromSql,ToSql,Debug,PartialEq)]
222+
#[postgres(name ="inventory_item")]
223+
structInventoryItem{
224+
r#type:String,
225+
}
226+
227+
letmut conn =Client::connect("user=postgres host=localhost port=5433",NoTls).unwrap();
228+
conn.batch_execute(
229+
"CREATE TYPE pg_temp.inventory_item AS (
230+
type TEXT
231+
)",
232+
)
233+
.unwrap();
234+
235+
let item =InventoryItem{
236+
r#type:"foo".to_owned(),
237+
};
238+
239+
test_type(&mut conn,"inventory_item",&[(item,"ROW('foo')")]);
240+
}

‎postgres-derive/src/composites.rs‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ impl Field {
1414

1515
let ident = raw.ident.as_ref().unwrap().clone();
1616
Ok(Field{
17-
name: overrides.name.unwrap_or_else(|| ident.to_string()),
17+
name: overrides.name.unwrap_or_else(||{
18+
let name = ident.to_string();
19+
match name.strip_prefix("r#"){
20+
Some(name) => name.to_string(),
21+
None => name,
22+
}
23+
}),
1824
ident,
1925
type_: raw.ty.clone(),
2026
})

‎postgres-derive/src/fromsql.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use proc_macro2::{Span,TokenStream};
2-
use quote::quote;
1+
use proc_macro2::TokenStream;
2+
use quote::{format_ident,quote};
33
use std::iter;
44
use syn::{Data,DataStruct,DeriveInput,Error,Fields,Ident};
55

@@ -119,7 +119,7 @@ fn domain_body(ident: &Ident, field: &syn::Field) -> TokenStream {
119119
fncomposite_body(ident:&Ident,fields:&[Field]) ->TokenStream{
120120
let temp_vars =&fields
121121
.iter()
122-
.map(|f|Ident::new(&format!("__{}", f.ident),Span::call_site()))
122+
.map(|f|format_ident!("__{}", f.ident))
123123
.collect::<Vec<_>>();
124124
let field_names =&fields.iter().map(|f|&f.name).collect::<Vec<_>>();
125125
let field_idents =&fields.iter().map(|f|&f.ident).collect::<Vec<_>>();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp