summaryrefslogtreecommitdiffstats
path: root/third_party/rust/thiserror/tests/test_from.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/thiserror/tests/test_from.rs')
-rw-r--r--third_party/rust/thiserror/tests/test_from.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/third_party/rust/thiserror/tests/test_from.rs b/third_party/rust/thiserror/tests/test_from.rs
new file mode 100644
index 0000000000..1f387055f5
--- /dev/null
+++ b/third_party/rust/thiserror/tests/test_from.rs
@@ -0,0 +1,62 @@
+use std::io;
+use thiserror::Error;
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub struct ErrorStruct {
+ #[from]
+ source: io::Error,
+}
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub struct ErrorStructOptional {
+ #[from]
+ source: Option<io::Error>,
+}
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub struct ErrorTuple(#[from] io::Error);
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub struct ErrorTupleOptional(#[from] Option<io::Error>);
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub enum ErrorEnum {
+ Test {
+ #[from]
+ source: io::Error,
+ },
+}
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub enum ErrorEnumOptional {
+ Test {
+ #[from]
+ source: Option<io::Error>,
+ },
+}
+
+#[derive(Error, Debug)]
+#[error("...")]
+pub enum Many {
+ Any(#[from] anyhow::Error),
+ Io(#[from] io::Error),
+}
+
+fn assert_impl<T: From<io::Error>>() {}
+
+#[test]
+fn test_from() {
+ assert_impl::<ErrorStruct>();
+ assert_impl::<ErrorStructOptional>();
+ assert_impl::<ErrorTuple>();
+ assert_impl::<ErrorTupleOptional>();
+ assert_impl::<ErrorEnum>();
+ assert_impl::<ErrorEnumOptional>();
+ assert_impl::<Many>();
+}