Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1662 from eupn/use-macrotest
Implement expansion tests
- Loading branch information
Showing
25 changed files
with
4,952 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
use std::env; | ||
use std::path::PathBuf; | ||
|
||
#[cfg(not(windows))] | ||
const CARGO_EXPAND_BIN: &str = "cargo-expand"; | ||
|
||
#[cfg(windows)] | ||
const CARGO_EXPAND_BIN: &str = "cargo-expand.exe"; | ||
|
||
/// Scans paths in PATH env variable for a presence of `CARGO_EXPAND_BIN` file. | ||
fn is_cargo_expand_present() -> bool { | ||
if let Ok(var) = env::var("PATH") { | ||
for path in var.split(":").map(PathBuf::from) { | ||
let cargo_expand_path = path.join(CARGO_EXPAND_BIN); | ||
if cargo_expand_path.exists() { | ||
return true; | ||
} | ||
} | ||
} | ||
|
||
false | ||
} | ||
|
||
pub fn main() { | ||
if is_cargo_expand_present() { | ||
println!("cargo:rustc-cfg=cargo_expand"); | ||
} | ||
} |
1,166 changes: 1,166 additions & 0 deletions
1,166
test_suite/tests/expand/derive/enum/de_enum.expanded.rs
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
use serde::Deserialize; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
enum DeEnum<B, C, D> { | ||
Unit, | ||
Seq(i8, B, C, D), | ||
Map { a: i8, b: B, c: C, d: D }, | ||
|
||
// Make sure we can support more than one variant. | ||
_Unit2, | ||
_Seq2(i8, B, C, D), | ||
_Map2 { a: i8, b: B, c: C, d: D }, | ||
} |
582 changes: 582 additions & 0 deletions
582
test_suite/tests/expand/derive/enum/generic_enum.expanded.rs
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
use serde::{Serialize, Deserialize}; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
pub enum GenericEnum<T, U> { | ||
Unit, | ||
NewType(T), | ||
Seq(T, U), | ||
Map { x: T, y: U }, | ||
} |
601 changes: 601 additions & 0 deletions
601
test_suite/tests/expand/derive/enum/lifetimes.expanded.rs
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
use serde::{Serialize, Deserialize}; | ||
|
||
#[derive(Serialize, Deserialize)] | ||
enum Lifetimes<'a> { | ||
LifetimeSeq(&'a i32), | ||
NoLifetimeSeq(i32), | ||
LifetimeMap { a: &'a i32 }, | ||
NoLifetimeMap { a: i32 }, | ||
} |
268 changes: 268 additions & 0 deletions
268
test_suite/tests/expand/derive/enum/ser_enum.expanded.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,268 @@ | ||
use serde::Serialize; | ||
enum SerEnum<'a, B: 'a, C: 'a, D> | ||
where | ||
D: 'a, | ||
{ | ||
Unit, | ||
Seq(i8, B, &'a C, &'a mut D), | ||
Map { a: i8, b: B, c: &'a C, d: &'a mut D }, | ||
_Unit2, | ||
_Seq2(i8, B, &'a C, &'a mut D), | ||
_Map2 { a: i8, b: B, c: &'a C, d: &'a mut D }, | ||
} | ||
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] | ||
const _IMPL_SERIALIZE_FOR_SerEnum: () = { | ||
#[allow(unknown_lints)] | ||
#[allow(rust_2018_idioms)] | ||
extern crate serde as _serde; | ||
#[automatically_derived] | ||
impl<'a, B: 'a, C: 'a, D> _serde::Serialize for SerEnum<'a, B, C, D> | ||
where | ||
D: 'a, | ||
B: _serde::Serialize, | ||
C: _serde::Serialize, | ||
D: _serde::Serialize, | ||
{ | ||
fn serialize<__S>(&self, __serializer: __S) -> _serde::export::Result<__S::Ok, __S::Error> | ||
where | ||
__S: _serde::Serializer, | ||
{ | ||
match *self { | ||
SerEnum::Unit => _serde::Serializer::serialize_unit_variant( | ||
__serializer, | ||
"SerEnum", | ||
0u32, | ||
"Unit", | ||
), | ||
SerEnum::Seq(ref __field0, ref __field1, ref __field2, ref __field3) => { | ||
let mut __serde_state = match _serde::Serializer::serialize_tuple_variant( | ||
__serializer, | ||
"SerEnum", | ||
1u32, | ||
"Seq", | ||
0 + 1 + 1 + 1 + 1, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field0, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field1, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field2, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field3, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
_serde::ser::SerializeTupleVariant::end(__serde_state) | ||
} | ||
SerEnum::Map { | ||
ref a, | ||
ref b, | ||
ref c, | ||
ref d, | ||
} => { | ||
let mut __serde_state = match _serde::Serializer::serialize_struct_variant( | ||
__serializer, | ||
"SerEnum", | ||
2u32, | ||
"Map", | ||
0 + 1 + 1 + 1 + 1, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"a", | ||
a, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"b", | ||
b, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"c", | ||
c, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"d", | ||
d, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
_serde::ser::SerializeStructVariant::end(__serde_state) | ||
} | ||
SerEnum::_Unit2 => _serde::Serializer::serialize_unit_variant( | ||
__serializer, | ||
"SerEnum", | ||
3u32, | ||
"_Unit2", | ||
), | ||
SerEnum::_Seq2(ref __field0, ref __field1, ref __field2, ref __field3) => { | ||
let mut __serde_state = match _serde::Serializer::serialize_tuple_variant( | ||
__serializer, | ||
"SerEnum", | ||
4u32, | ||
"_Seq2", | ||
0 + 1 + 1 + 1 + 1, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field0, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field1, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field2, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeTupleVariant::serialize_field( | ||
&mut __serde_state, | ||
__field3, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
_serde::ser::SerializeTupleVariant::end(__serde_state) | ||
} | ||
SerEnum::_Map2 { | ||
ref a, | ||
ref b, | ||
ref c, | ||
ref d, | ||
} => { | ||
let mut __serde_state = match _serde::Serializer::serialize_struct_variant( | ||
__serializer, | ||
"SerEnum", | ||
5u32, | ||
"_Map2", | ||
0 + 1 + 1 + 1 + 1, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"a", | ||
a, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"b", | ||
b, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"c", | ||
c, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
match _serde::ser::SerializeStructVariant::serialize_field( | ||
&mut __serde_state, | ||
"d", | ||
d, | ||
) { | ||
_serde::export::Ok(__val) => __val, | ||
_serde::export::Err(__err) => { | ||
return _serde::export::Err(__err); | ||
} | ||
}; | ||
_serde::ser::SerializeStructVariant::end(__serde_state) | ||
} | ||
} | ||
} | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
use serde::Serialize; | ||
|
||
#[derive(Serialize)] | ||
enum SerEnum<'a, B: 'a, C: 'a, D> | ||
where | ||
D: 'a, | ||
{ | ||
Unit, | ||
Seq(i8, B, &'a C, &'a mut D), | ||
Map { a: i8, b: B, c: &'a C, d: &'a mut D }, | ||
|
||
// Make sure we can support more than one variant. | ||
_Unit2, | ||
_Seq2(i8, B, &'a C, &'a mut D), | ||
_Map2 { a: i8, b: B, c: &'a C, d: &'a mut D }, | ||
} |
Oops, something went wrong.