Skip to content

Commit e2cbc37

Browse files
committed
improve docs of changeset derives
1 parent b7337c6 commit e2cbc37

6 files changed

+243
-0
lines changed

diesel_derives/build.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,26 @@ fn main() {
146146
"diesel_derives__tests__as_changeset_table_name_1.snap",
147147
"With `#[diesel(table_name = crate::schema::users)]`",
148148
),
149+
Example::with_heading(
150+
"diesel_derives__tests__as_changeset_change_field_to_type_1.snap",
151+
"With `#[serialize_as = String]`",
152+
),
153+
Example::with_heading(
154+
"diesel_derives__tests__as_changeset_embed_1.snap",
155+
"With `#[diesel(embed)]`",
156+
),
157+
Example::with_heading(
158+
"diesel_derives__tests__as_changeset_column_name_1.snap",
159+
"With `#[diesel(column_name = username)]`",
160+
),
161+
Example::with_heading(
162+
"diesel_derives__tests__as_changeset_treat_none_field_as_null_1.snap",
163+
"With `#[diesel(treat_none_as_null = true)]`",
164+
),
165+
Example::with_heading(
166+
"diesel_derives__tests__as_changeset_treat_skip_update_1.snap",
167+
"With `#[diesel(skip_update)]`",
168+
),
149169
],
150170
),
151171
(

diesel_derives/src/tests/as_changeset.rs

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,90 @@ pub(crate) fn as_changeset_primary_key_1() {
6969
"as_changeset_primary_key_1",
7070
);
7171
}
72+
73+
#[test]
74+
pub(crate) fn as_changeset_column_name_1() {
75+
let input = quote::quote! {
76+
struct User {
77+
id: i32,
78+
#[diesel(column_name = username)]
79+
name: String
80+
}
81+
};
82+
expand_with(
83+
&crate::derive_as_changeset_inner as &dyn Fn(_) -> _,
84+
input,
85+
derive(syn::parse_quote!(#[derive(AsChangeset)])),
86+
"as_changeset_column_name_1",
87+
);
88+
}
89+
90+
#[test]
91+
pub(crate) fn as_changeset_embed_1() {
92+
let input = quote::quote! {
93+
struct User {
94+
id: i32,
95+
name: String,
96+
#[diesel(embed)]
97+
post: Post
98+
}
99+
};
100+
expand_with(
101+
&crate::derive_as_changeset_inner as &dyn Fn(_) -> _,
102+
input,
103+
derive(syn::parse_quote!(#[derive(AsChangeset)])),
104+
"as_changeset_embed_1",
105+
);
106+
}
107+
108+
#[test]
109+
pub(crate) fn as_changeset_change_field_type_1() {
110+
let input = quote::quote! {
111+
struct User {
112+
id: i32,
113+
name: String,
114+
#[diesel(serialize_as = String)]
115+
age: i32
116+
}
117+
};
118+
expand_with(
119+
&crate::derive_as_changeset_inner as &dyn Fn(_) -> _,
120+
input,
121+
derive(syn::parse_quote!(#[derive(AsChangeset)])),
122+
"as_changeset_change_field_type_1",
123+
);
124+
}
125+
126+
#[test]
127+
pub(crate) fn as_changeset_treat_none_field_as_null_1() {
128+
let input = quote::quote! {
129+
struct User {
130+
id: i32,
131+
#[diesel(treat_none_as_null = true)]
132+
name: Option<String>
133+
}
134+
};
135+
expand_with(
136+
&crate::derive_as_changeset_inner as &dyn Fn(_) -> _,
137+
input,
138+
derive(syn::parse_quote!(#[derive(AsChangeset)])),
139+
"as_changeset_treat_none_field_as_null_1",
140+
);
141+
}
142+
143+
#[test]
144+
pub(crate) fn as_changeset_treat_skip_update_1() {
145+
let input = quote::quote! {
146+
struct User {
147+
id: i32,
148+
#[diesel(skip_update)]
149+
name: String
150+
}
151+
};
152+
expand_with(
153+
&crate::derive_as_changeset_inner as &dyn Fn(_) -> _,
154+
input,
155+
derive(syn::parse_quote!(#[derive(AsChangeset)])),
156+
"as_changeset_treat_skip_update_1",
157+
);
158+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
source: diesel_derives/src/tests/mod.rs
3+
expression: out
4+
info:
5+
input: "#[derive(AsChangeset)]\nstruct User {\n id: i32,\n #[diesel(column_name = username)]\n name: String,\n}\n"
6+
---
7+
const _: () = {
8+
use diesel;
9+
impl diesel::query_builder::AsChangeset for User {
10+
type Target = users::table;
11+
type Changeset = <(
12+
diesel::dsl::Eq<users::r#username, String>,
13+
) as diesel::query_builder::AsChangeset>::Changeset;
14+
fn as_changeset(
15+
self,
16+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
17+
diesel::query_builder::AsChangeset::as_changeset((
18+
diesel::ExpressionMethods::eq(users::r#username, self.name),
19+
))
20+
}
21+
}
22+
impl<'update> diesel::query_builder::AsChangeset for &'update User {
23+
type Target = users::table;
24+
type Changeset = <(
25+
diesel::dsl::Eq<users::r#username, &'update String>,
26+
) as diesel::query_builder::AsChangeset>::Changeset;
27+
fn as_changeset(
28+
self,
29+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
30+
diesel::query_builder::AsChangeset::as_changeset((
31+
diesel::ExpressionMethods::eq(users::r#username, &self.name),
32+
))
33+
}
34+
}
35+
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
source: diesel_derives/src/tests/mod.rs
3+
expression: out
4+
info:
5+
input: "#[derive(AsChangeset)]\nstruct User {\n id: i32,\n name: String,\n #[diesel(embed)]\n post: Post,\n}\n"
6+
---
7+
const _: () = {
8+
use diesel;
9+
impl diesel::query_builder::AsChangeset for User {
10+
type Target = users::table;
11+
type Changeset = <(
12+
diesel::dsl::Eq<users::r#name, String>,
13+
Post,
14+
) as diesel::query_builder::AsChangeset>::Changeset;
15+
fn as_changeset(
16+
self,
17+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
18+
diesel::query_builder::AsChangeset::as_changeset((
19+
diesel::ExpressionMethods::eq(users::r#name, self.name),
20+
self.post,
21+
))
22+
}
23+
}
24+
impl<'update> diesel::query_builder::AsChangeset for &'update User {
25+
type Target = users::table;
26+
type Changeset = <(
27+
diesel::dsl::Eq<users::r#name, &'update String>,
28+
&'update Post,
29+
) as diesel::query_builder::AsChangeset>::Changeset;
30+
fn as_changeset(
31+
self,
32+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
33+
diesel::query_builder::AsChangeset::as_changeset((
34+
diesel::ExpressionMethods::eq(users::r#name, &self.name),
35+
&self.post,
36+
))
37+
}
38+
}
39+
};
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
source: diesel_derives/src/tests/mod.rs
3+
expression: out
4+
info:
5+
input: "#[derive(AsChangeset)]\nstruct User {\n id: i32,\n #[diesel(treat_none_as_null = true)]\n name: Option<String>,\n}\n"
6+
---
7+
const _: () = {
8+
use diesel;
9+
impl diesel::query_builder::AsChangeset for User {
10+
type Target = users::table;
11+
type Changeset = <(
12+
diesel::dsl::Eq<users::r#name, Option<String>>,
13+
) as diesel::query_builder::AsChangeset>::Changeset;
14+
fn as_changeset(
15+
self,
16+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
17+
diesel::query_builder::AsChangeset::as_changeset((
18+
diesel::ExpressionMethods::eq(users::r#name, self.name),
19+
))
20+
}
21+
}
22+
impl<'update> diesel::query_builder::AsChangeset for &'update User {
23+
type Target = users::table;
24+
type Changeset = <(
25+
diesel::dsl::Eq<users::r#name, &'update Option<String>>,
26+
) as diesel::query_builder::AsChangeset>::Changeset;
27+
fn as_changeset(
28+
self,
29+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
30+
diesel::query_builder::AsChangeset::as_changeset((
31+
diesel::ExpressionMethods::eq(users::r#name, &self.name),
32+
))
33+
}
34+
}
35+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
source: diesel_derives/src/tests/mod.rs
3+
expression: out
4+
info:
5+
input: "#[derive(AsChangeset)]\nstruct User {\n id: i32,\n #[diesel(skip_update)]\n name: String,\n}\n"
6+
---
7+
const _: () = {
8+
use diesel;
9+
impl diesel::query_builder::AsChangeset for User {
10+
type Target = users::table;
11+
type Changeset = <() as diesel::query_builder::AsChangeset>::Changeset;
12+
fn as_changeset(
13+
self,
14+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
15+
diesel::query_builder::AsChangeset::as_changeset(())
16+
}
17+
}
18+
impl<'update> diesel::query_builder::AsChangeset for &'update User {
19+
type Target = users::table;
20+
type Changeset = <() as diesel::query_builder::AsChangeset>::Changeset;
21+
fn as_changeset(
22+
self,
23+
) -> <Self as diesel::query_builder::AsChangeset>::Changeset {
24+
diesel::query_builder::AsChangeset::as_changeset(())
25+
}
26+
}
27+
};

0 commit comments

Comments
 (0)