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 | |
| parent | 9c00ef6248bd6545f262f18f31b15fc681e88972 (diff) | |
| download | focaccia-qemu-bc2a48d647752e4f99247184f5dfe00e67a2de8f.tar.gz focaccia-qemu-bc2a48d647752e4f99247184f5dfe00e67a2de8f.zip | |
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')
| -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 103470785e..c18bb4e036 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 } } |