about summary refs log tree commit diff
path: root/tests/ui/proc-macro/macro-crate-multi-decorator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/proc-macro/macro-crate-multi-decorator.rs')
-rw-r--r--tests/ui/proc-macro/macro-crate-multi-decorator.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/ui/proc-macro/macro-crate-multi-decorator.rs b/tests/ui/proc-macro/macro-crate-multi-decorator.rs
new file mode 100644
index 00000000000..ec57dec14ed
--- /dev/null
+++ b/tests/ui/proc-macro/macro-crate-multi-decorator.rs
@@ -0,0 +1,41 @@
+// The duplicate macro will create a copy of the item with the given identifier.
+
+// check-pass
+// aux-build:duplicate.rs
+
+#[macro_use]
+extern crate duplicate;
+
+#[duplicate(MyCopy)]
+struct MyStruct {
+    number: i32,
+}
+
+trait TestTrait {
+    #[duplicate(TestType2)]
+    type TestType;
+
+    #[duplicate(required_fn2)]
+    fn required_fn(&self);
+
+    #[duplicate(provided_fn2)]
+    fn provided_fn(&self) {}
+}
+
+impl TestTrait for MyStruct {
+    #[duplicate(TestType2)]
+    type TestType = f64;
+
+    #[duplicate(required_fn2)]
+    fn required_fn(&self) {}
+}
+
+fn main() {
+    let s = MyStruct { number: 42 };
+    s.required_fn();
+    s.required_fn2();
+    s.provided_fn();
+    s.provided_fn2();
+
+    let s = MyCopy { number: 42 };
+}