diff --git a/miette-derive/src/help.rs b/miette-derive/src/help.rs index 1c21054..4a3d55c 100644 --- a/miette-derive/src/help.rs +++ b/miette-derive/src/help.rs @@ -108,7 +108,7 @@ impl Help { Some(quote! { Self::#ident #display_pat => { use miette::macro_helpers::ToOption; - miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&#help).as_ref().map(|#var| -> std::boxed::Box { std::boxed::Box::new(format!("{}", #var)) }) + miette::macro_helpers::OptionalWrapper::<#ty>::to_option(&#help).as_ref().map(|#var| -> std::boxed::Box { std::boxed::Box::new(format!("{}", #var)) }) }, }) } @@ -137,7 +137,7 @@ impl Help { #[allow(unused_variables, deprecated)] let Self #display_pat = self; use miette::macro_helpers::ToOption; - miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&self.#member).as_ref().map(|#var| -> std::boxed::Box { std::boxed::Box::new(format!("{}", #var)) }) + miette::macro_helpers::OptionalWrapper::<#ty>::to_option(&self.#member).as_ref().map(|#var| -> std::boxed::Box { std::boxed::Box::new(format!("{}", #var)) }) } }) } diff --git a/miette-derive/src/label.rs b/miette-derive/src/label.rs index ab2ceac..f2b1c1b 100644 --- a/miette-derive/src/label.rs +++ b/miette-derive/src/label.rs @@ -186,7 +186,7 @@ impl Labels { }; Some(quote! { - miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(&self.#span) + miette::macro_helpers::OptionalWrapper::<#ty>::to_option(&self.#span) .map(|#var| #ctor( #display, #var.clone(), @@ -273,7 +273,7 @@ impl Labels { }; Some(quote! { - miette::macro_helpers::OptionalWrapper::<#ty>::new().to_option(#field) + miette::macro_helpers::OptionalWrapper::<#ty>::to_option(#field) .map(|#var| #ctor( #display, #var.clone(), diff --git a/src/macro_helpers.rs b/src/macro_helpers.rs index 157f2b3..77aec4e 100644 --- a/src/macro_helpers.rs +++ b/src/macro_helpers.rs @@ -3,38 +3,25 @@ use crate::protocol::{LabeledSpan, SourceSpan}; // Huge thanks to @jam1gamer for this hack: // https://twitter.com/jam1garner/status/1515887996444323840 -#[doc(hidden)] -pub trait IsOption {} -impl IsOption for Option {} - #[doc(hidden)] #[derive(Debug, Default)] pub struct OptionalWrapper(pub core::marker::PhantomData); -impl OptionalWrapper { - pub fn new() -> Self { - Self(core::marker::PhantomData) - } -} - #[doc(hidden)] pub trait ToOption { #[doc(hidden)] - fn to_option(self, value: T) -> Option; + fn to_option(value: T) -> Option; } -impl OptionalWrapper -where - T: IsOption, -{ +impl OptionalWrapper> { #[doc(hidden)] - pub fn to_option(self, value: &T) -> &T { + pub fn to_option(value: &Option) -> &Option { value } } -impl ToOption for &OptionalWrapper { - fn to_option(self, value: U) -> Option { +impl ToOption for OptionalWrapper { + fn to_option(value: U) -> Option { Some(value) } }