scovich commented on code in PR #8208:
URL: https://github.com/apache/arrow-rs/pull/8208#discussion_r2296013459


##########
parquet-variant/src/builder.rs:
##########
@@ -589,14 +675,14 @@ enum ParentState<'a> {
     Variant {
         value_builder: &'a mut ValueBuilder,
         saved_value_builder_offset: usize,
-        metadata_builder: &'a mut MetadataBuilder,
+        metadata_builder: &'a mut dyn MetadataBuilder,

Review Comment:
   Yeah I was trying to avoid the "pollution" that generics would cause, which 
is clearly visible in my first attempt:
   * https://github.com/apache/arrow-rs/pull/7915
   
   But we may need to go generic now, because 
`VariantArrayVariantBuilder::finish` needs access to 
`BasicMetadataBuilder::finish` in order to work correctly, and that's 
unavailable because the parent state has upcast it to `&mut dyn 
MetadataBuilder`. 
   
   I initially reached for `std::any::AsAny`, but it turns out that types with 
non-static lifetimes cannot implement `std::any::Any` because the lifetime 
information would be lost.
   
   In order to get the latest merge with upstream to compile, I had to define a 
new `MetadataBuilder::finish` trait method to expose the underlying 
`BasicMetadataBuilder::finish`, but that also forced a no-op 
`ReadOnlyMetadataBuilder::finish`.
   
   Honestly, the generic mess gets messy enough (including a bunch of methods 
that are only defined for specific combinations of types) that I lean strongly 
toward keeping the `dyn` indirection unless we're _really_ certain we need it.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to