diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2025-06-05 11:12:15 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2025-06-06 14:32:54 +0200 |
commit | bc2a48d647752e4f99247184f5dfe00e67a2de8f (patch) | |
tree | c4f1252b1ff23ccde65e385e4827ccc56104f39a /rust/qemu-api-macros/src | |
parent | 9c00ef6248bd6545f262f18f31b15fc681e88972 (diff) | |
download | qemu-bc2a48d647752e4f99247184f5dfe00e67a2de8f.zip qemu-bc2a48d647752e4f99247184f5dfe00e67a2de8f.tar.gz qemu-bc2a48d647752e4f99247184f5dfe00e67a2de8f.tar.bz2 |
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>
Diffstat (limited to 'rust/qemu-api-macros/src')
-rw-r--r-- | rust/qemu-api-macros/src/lib.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/rust/qemu-api-macros/src/lib.rs b/rust/qemu-api-macros/src/lib.rs index 1034707..c18bb4e 100644 --- a/rust/qemu-api-macros/src/lib.rs +++ b/rust/qemu-api-macros/src/lib.rs @@ -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 } } |