mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06: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:
parent
9c00ef6248
commit
bc2a48d647
1 changed files with 4 additions and 3 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue