mirror of
https://github.com/xemu-project/xemu.git
synced 2026-07-11 01:24:41 +02:00
rust: make TryFrom macro more resilient
If the enum includes values such as "Ok", "Err", or "Error", the TryInto macro can cause errors. Be careful and qualify identifiers with the full path, or in the case of TryFrom<>::Error do not use the associated type at all. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
@@ -203,8 +203,8 @@ fn derive_tryinto_body(
|
||||
Ok(quote! {
|
||||
#(const #discriminants: #repr = #name::#discriminants as #repr;)*;
|
||||
match value {
|
||||
#(#discriminants => Ok(#name::#discriminants),)*
|
||||
_ => Err(value),
|
||||
#(#discriminants => core::result::Result::Ok(#name::#discriminants),)*
|
||||
_ => core::result::Result::Err(value),
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -236,7 +236,8 @@ fn derive_tryinto_or_error(input: DeriveInput) -> Result<proc_macro2::TokenStrea
|
||||
impl core::convert::TryFrom<#repr> for #name {
|
||||
type Error = #repr;
|
||||
|
||||
fn try_from(value: #repr) -> Result<Self, Self::Error> {
|
||||
#[allow(ambiguous_associated_items)]
|
||||
fn try_from(value: #repr) -> Result<Self, #repr> {
|
||||
#body
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user