alamb commented on code in PR #6444:
URL: https://github.com/apache/arrow-rs/pull/6444#discussion_r1773863969


##########
arrow-ipc/src/convert.rs:
##########
@@ -27,13 +27,63 @@ use std::collections::HashMap;
 use std::fmt::{Debug, Formatter};
 use std::sync::Arc;
 
+use crate::writer::DictionaryTracker;
 use crate::{size_prefixed_root_as_message, KeyValue, Message, 
CONTINUATION_MARKER};
 use DataType::*;
 
+pub struct IpcSchemaConverter<'a> {
+    dictionary_tracker: &'a mut DictionaryTracker,
+}
+
+impl IpcSchemaConverter<'_> {
+    pub fn new(dictionary_tracker: &mut DictionaryTracker) -> 
IpcSchemaConverter<'_> {
+        IpcSchemaConverter { dictionary_tracker }
+    }
+
+    /// Serialize a schema in IPC format
+    pub fn schema_to_fb<'a>(&mut self, schema: &'a Schema) -> 
FlatBufferBuilder<'a> {
+        let mut fbb = FlatBufferBuilder::new();
+
+        let root = self.schema_to_fb_offset(&mut fbb, schema);
+
+        fbb.finish(root, None);
+
+        fbb
+    }
+
+    pub fn schema_to_fb_offset<'a>(
+        &mut self,
+        fbb: &mut FlatBufferBuilder<'a>,
+        schema: &Schema,
+    ) -> WIPOffset<crate::Schema<'a>> {
+        let fields = schema
+            .fields()
+            .iter()
+            .map(|field| build_field(fbb, &mut Some(self.dictionary_tracker), 
field))
+            .collect::<Vec<_>>();
+        let fb_field_list = fbb.create_vector(&fields);
+
+        let fb_metadata_list =
+            (!schema.metadata().is_empty()).then(|| metadata_to_fb(fbb, 
schema.metadata()));
+
+        let mut builder = crate::SchemaBuilder::new(fbb);
+        builder.add_fields(fb_field_list);
+        if let Some(fb_metadata_list) = fb_metadata_list {
+            builder.add_custom_metadata(fb_metadata_list);
+        }
+        builder.finish()
+    }
+}
+
 /// Serialize a schema in IPC format
-pub fn schema_to_fb(schema: &Schema) -> FlatBufferBuilder {
+#[deprecated(
+    since = "54.0.0",
+    note = "Use `IpcSchemaConverter` instead. This function will be removed in 
the next release."

Review Comment:
   ```suggestion
       note = "Use `IpcSchemaConverter` instead. This function will be removed 
in a future release."
   ```



##########
arrow-ipc/src/convert.rs:
##########
@@ -27,13 +27,63 @@ use std::collections::HashMap;
 use std::fmt::{Debug, Formatter};
 use std::sync::Arc;
 
+use crate::writer::DictionaryTracker;
 use crate::{size_prefixed_root_as_message, KeyValue, Message, 
CONTINUATION_MARKER};
 use DataType::*;
 
+pub struct IpcSchemaConverter<'a> {
+    dictionary_tracker: &'a mut DictionaryTracker,
+}
+
+impl IpcSchemaConverter<'_> {
+    pub fn new(dictionary_tracker: &mut DictionaryTracker) -> 
IpcSchemaConverter<'_> {
+        IpcSchemaConverter { dictionary_tracker }
+    }
+
+    /// Serialize a schema in IPC format
+    pub fn schema_to_fb<'a>(&mut self, schema: &'a Schema) -> 
FlatBufferBuilder<'a> {
+        let mut fbb = FlatBufferBuilder::new();
+
+        let root = self.schema_to_fb_offset(&mut fbb, schema);
+
+        fbb.finish(root, None);
+
+        fbb
+    }
+
+    pub fn schema_to_fb_offset<'a>(
+        &mut self,
+        fbb: &mut FlatBufferBuilder<'a>,
+        schema: &Schema,
+    ) -> WIPOffset<crate::Schema<'a>> {
+        let fields = schema
+            .fields()
+            .iter()
+            .map(|field| build_field(fbb, &mut Some(self.dictionary_tracker), 
field))
+            .collect::<Vec<_>>();
+        let fb_field_list = fbb.create_vector(&fields);
+
+        let fb_metadata_list =
+            (!schema.metadata().is_empty()).then(|| metadata_to_fb(fbb, 
schema.metadata()));
+
+        let mut builder = crate::SchemaBuilder::new(fbb);
+        builder.add_fields(fb_field_list);
+        if let Some(fb_metadata_list) = fb_metadata_list {
+            builder.add_custom_metadata(fb_metadata_list);
+        }
+        builder.finish()
+    }
+}
+
 /// Serialize a schema in IPC format
-pub fn schema_to_fb(schema: &Schema) -> FlatBufferBuilder {
+#[deprecated(
+    since = "54.0.0",
+    note = "Use `IpcSchemaConverter` instead. This function will be removed in 
the next release."

Review Comment:
   ```suggestion
       note = "Use `IpcSchemaConverter` instead. This function will be removed 
in a future release."
   ```



-- 
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]

Reply via email to