viirya commented on code in PR #7865:
URL: https://github.com/apache/arrow-rs/pull/7865#discussion_r2186003389
##########
parquet-variant/src/builder.rs:
##########
@@ -668,43 +739,41 @@ impl<'a, 'b> ObjectBuilder<'a, 'b> {
self
}
- /// Return a new [`ObjectBuilder`] to add a nested object with the
specified
- /// key to the object.
- pub fn new_object(&mut self, key: &'b str) -> ObjectBuilder {
- self.check_pending_field();
-
- let field_start = self.buffer.offset();
- let obj_builder = ObjectBuilder::new(&mut self.buffer,
self.metadata_builder)
- .with_validate_unique_fields(self.validate_unique_fields);
- self.pending = Some((key, field_start));
-
- obj_builder
+ // Returns validate_unique_fields because we can no longer reference self
once this method returns.
+ fn parent_state<'b>(&'b mut self, key: &'b str) -> (ParentState<'b>, bool)
{
+ let state = ParentState::Object {
+ buffer: &mut self.buffer,
+ metadata_builder: self.parent_state.metadata_builder(),
+ fields: &mut self.fields,
+ field_name: key,
+ };
+ (state, self.validate_unique_fields)
}
- /// Return a new [`ListBuilder`] to add a list with the specified key to
the
- /// object.
- pub fn new_list(&mut self, key: &'b str) -> ListBuilder {
- self.check_pending_field();
-
- let field_start = self.buffer.offset();
- let list_builder = ListBuilder::new(&mut self.buffer,
self.metadata_builder)
- .with_validate_unique_fields(self.validate_unique_fields);
- self.pending = Some((key, field_start));
-
- list_builder
+ /// Returns an object builder that can be used to append a new (nested)
object to this list.
+ ///
+ /// WARNING: The builder will have no effect unless/until
[`ObjectBuilder::finish`] is called.
+ pub fn new_object<'b>(&'b mut self, key: &'b str) -> ObjectBuilder<'b> {
+ let (parent_state, validate_unique_fields) = self.parent_state(key);
+ ObjectBuilder::new(parent_state, validate_unique_fields)
}
- /// Finalize object
+ /// Returns a list builder that can be used to append a new (nested) list
to this list.
Review Comment:
```suggestion
/// Returns a list builder that can be used to append a new (nested)
list to this object.
```
##########
parquet-variant/src/builder.rs:
##########
@@ -668,43 +739,41 @@ impl<'a, 'b> ObjectBuilder<'a, 'b> {
self
}
- /// Return a new [`ObjectBuilder`] to add a nested object with the
specified
- /// key to the object.
- pub fn new_object(&mut self, key: &'b str) -> ObjectBuilder {
- self.check_pending_field();
-
- let field_start = self.buffer.offset();
- let obj_builder = ObjectBuilder::new(&mut self.buffer,
self.metadata_builder)
- .with_validate_unique_fields(self.validate_unique_fields);
- self.pending = Some((key, field_start));
-
- obj_builder
+ // Returns validate_unique_fields because we can no longer reference self
once this method returns.
+ fn parent_state<'b>(&'b mut self, key: &'b str) -> (ParentState<'b>, bool)
{
+ let state = ParentState::Object {
+ buffer: &mut self.buffer,
+ metadata_builder: self.parent_state.metadata_builder(),
+ fields: &mut self.fields,
+ field_name: key,
+ };
+ (state, self.validate_unique_fields)
}
- /// Return a new [`ListBuilder`] to add a list with the specified key to
the
- /// object.
- pub fn new_list(&mut self, key: &'b str) -> ListBuilder {
- self.check_pending_field();
-
- let field_start = self.buffer.offset();
- let list_builder = ListBuilder::new(&mut self.buffer,
self.metadata_builder)
- .with_validate_unique_fields(self.validate_unique_fields);
- self.pending = Some((key, field_start));
-
- list_builder
+ /// Returns an object builder that can be used to append a new (nested)
object to this list.
Review Comment:
```suggestion
/// Returns an object builder that can be used to append a new (nested)
object to this object.
```
##########
parquet-variant/src/builder.rs:
##########
@@ -668,43 +739,41 @@ impl<'a, 'b> ObjectBuilder<'a, 'b> {
self
}
- /// Return a new [`ObjectBuilder`] to add a nested object with the
specified
- /// key to the object.
- pub fn new_object(&mut self, key: &'b str) -> ObjectBuilder {
- self.check_pending_field();
-
- let field_start = self.buffer.offset();
- let obj_builder = ObjectBuilder::new(&mut self.buffer,
self.metadata_builder)
- .with_validate_unique_fields(self.validate_unique_fields);
- self.pending = Some((key, field_start));
-
- obj_builder
+ // Returns validate_unique_fields because we can no longer reference self
once this method returns.
Review Comment:
Hmm, I didn't run this code, but why cannot reference self after this
returns? I don't see `parent_state` consume self.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]