Skip to content

Commit e69f158

Browse files
committed
cfail tests for derive
1 parent 218d889 commit e69f158

File tree

8 files changed

+101
-4
lines changed

8 files changed

+101
-4
lines changed

postgres-derive-test/Cargo.toml

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ version = "0.1.0"
44
authors = ["Steven Fackler <[email protected]>"]
55
edition = "2018"
66

7-
[dependencies]
7+
[dev-dependencies]
8+
trybuild = "1.0"
9+
810
postgres-types = { path = "../postgres-types", features = ["derive"] }
911
postgres = { path = "../postgres" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use postgres_types::{FromSql, ToSql};
2+
3+
#[derive(ToSql)]
4+
struct ToSqlUnit;
5+
6+
#[derive(FromSql)]
7+
struct FromSqlUnit;
8+
9+
#[derive(ToSql)]
10+
struct ToSqlTuple(i32, i32);
11+
12+
#[derive(FromSql)]
13+
struct FromSqlTuple(i32, i32);
14+
15+
#[derive(ToSql)]
16+
enum ToSqlEnum {
17+
Foo(i32),
18+
}
19+
20+
#[derive(FromSql)]
21+
enum FromSqlEnum {
22+
Foo(i32),
23+
}
24+
25+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
error: #[derive(ToSql)] may only be applied to structs, single field tuple structs, and enums
2+
--> $DIR/invalid-types.rs:4:1
3+
|
4+
4 | struct ToSqlUnit;
5+
| ^^^^^^^^^^^^^^^^^
6+
7+
error: #[derive(FromSql)] may only be applied to structs, single field tuple structs, and enums
8+
--> $DIR/invalid-types.rs:7:1
9+
|
10+
7 | struct FromSqlUnit;
11+
| ^^^^^^^^^^^^^^^^^^^
12+
13+
error: #[derive(ToSql)] may only be applied to structs, single field tuple structs, and enums
14+
--> $DIR/invalid-types.rs:10:1
15+
|
16+
10 | struct ToSqlTuple(i32, i32);
17+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18+
19+
error: #[derive(FromSql)] may only be applied to structs, single field tuple structs, and enums
20+
--> $DIR/invalid-types.rs:13:1
21+
|
22+
13 | struct FromSqlTuple(i32, i32);
23+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24+
25+
error: non-C-like enums are not supported
26+
--> $DIR/invalid-types.rs:17:5
27+
|
28+
17 | Foo(i32),
29+
| ^^^^^^^^
30+
31+
error: non-C-like enums are not supported
32+
--> $DIR/invalid-types.rs:22:5
33+
|
34+
22 | Foo(i32),
35+
| ^^^^^^^^
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
use postgres_types::{FromSql, ToSql};
2+
3+
#[derive(FromSql)]
4+
#[postgres(foo = "bar")]
5+
struct Foo {
6+
a: i32,
7+
}
8+
9+
#[derive(ToSql)]
10+
#[postgres(foo = "bar")]
11+
struct Bar {
12+
a: i32,
13+
}
14+
15+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
error: unknown override
2+
--> $DIR/unknown-override.rs:4:12
3+
|
4+
4 | #[postgres(foo = "bar")]
5+
| ^^^
6+
7+
error: unknown override
8+
--> $DIR/unknown-override.rs:10:12
9+
|
10+
10 | #[postgres(foo = "bar")]
11+
| ^^^

postgres-derive-test/src/lib.rs

+5
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,8 @@ where
2525
assert_eq!(val, &result);
2626
}
2727
}
28+
29+
#[test]
30+
fn compile_fail() {
31+
trybuild::TestCases::new().compile_fail("src/compile-fail/*.rs");
32+
}

postgres-derive/src/fromsql.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ pub fn expand_derive_fromsql(input: DeriveInput) -> Result<TokenStream, Error> {
5151
_ => {
5252
return Err(Error::new_spanned(
5353
input,
54-
"#[derive(ToSql)] may only be applied to structs, single field tuple structs, and enums",
54+
"#[derive(FromSql)] may only be applied to structs, single field tuple structs, and enums",
5555
))
5656
}
5757
};

postgres-derive/src/lib.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,15 @@ mod tosql;
1818
#[proc_macro_derive(ToSql, attributes(postgres))]
1919
pub fn derive_tosql(input: TokenStream) -> TokenStream {
2020
let input = syn::parse(input).unwrap();
21-
tosql::expand_derive_tosql(input).unwrap().into()
21+
tosql::expand_derive_tosql(input)
22+
.unwrap_or_else(|e| e.to_compile_error())
23+
.into()
2224
}
2325

2426
#[proc_macro_derive(FromSql, attributes(postgres))]
2527
pub fn derive_fromsql(input: TokenStream) -> TokenStream {
2628
let input = syn::parse(input).unwrap();
27-
fromsql::expand_derive_fromsql(input).unwrap().into()
29+
fromsql::expand_derive_fromsql(input)
30+
.unwrap_or_else(|e| e.to_compile_error())
31+
.into()
2832
}

0 commit comments

Comments
 (0)