From 61388f50a95ea63c83664e7ded0790cd0b6d3dc2 Mon Sep 17 00:00:00 2001 From: Chance Date: Tue, 5 Mar 2024 18:41:10 -0500 Subject: [PATCH] Add missing generics and trait bounds to `FromString` impl Fixes #441 --- snafu-derive/src/shared.rs | 7 ++++++- tests/generics.rs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/snafu-derive/src/shared.rs b/snafu-derive/src/shared.rs index 6e6da13..b30dd29 100644 --- a/snafu-derive/src/shared.rs +++ b/snafu-derive/src/shared.rs @@ -358,8 +358,10 @@ pub mod context_selector { let parameterized_error_name = self.parameterized_error_name; let error_constructor_name = self.error_constructor_name; let construct_implicit_fields = self.construct_implicit_fields(); + let original_generics_without_defaults = self.original_generics_without_defaults; let construct_implicit_fields_with_source = self.construct_implicit_fields_with_source(); + let extended_where_clauses = self.extended_where_clauses(); // testme: transform @@ -381,7 +383,10 @@ pub mod context_selector { let message_field_name = &message_field.name; quote! { - impl #crate_root::FromString for #parameterized_error_name { + impl<#(#original_generics_without_defaults,)*> #crate_root::FromString for #parameterized_error_name + where + #(#extended_where_clauses),* + { type Source = #source_ty; #[track_caller] diff --git a/tests/generics.rs b/tests/generics.rs index e9fe817..6475cc6 100644 --- a/tests/generics.rs +++ b/tests/generics.rs @@ -62,6 +62,13 @@ mod bounds { enum Error { #[snafu(display("Boom: {value}"))] Boom { value: T }, + + #[snafu(whatever, display("{message}"))] + Whatever { + message: String, + #[snafu(source(from(Box, Some)))] + source: Option>, + }, } #[test] @@ -88,6 +95,13 @@ mod bounds { { #[snafu(display("Boom: {value}"))] Boom { value: T }, + + #[snafu(whatever, display("{message}"))] + Whatever { + message: String, + #[snafu(source(from(Box, Some)))] + source: Option>, + }, } #[test]