This is an automated email from the ASF dual-hosted git repository.

tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new a38e460ac Remove `StringOffsetTrait` and `BinaryOffsetTrait` (#1645)
a38e460ac is described below

commit a38e460aca6cb247eac8bb8a6461947f00fe89d0
Author: Remzi Yang <[email protected]>
AuthorDate: Fri May 6 14:43:54 2022 +0800

    Remove `StringOffsetTrait` and `BinaryOffsetTrait` (#1645)
    
    * remove StringOffsetTrait
    
    Signed-off-by: remzi <[email protected]>
    
    * remove BinaryOffsetTrait
    
    Signed-off-by: remzi <[email protected]>
---
 arrow/src/array/array_binary.rs         | 58 +++++++++++---------------
 arrow/src/array/array_string.rs         | 62 ++++++++++++----------------
 arrow/src/array/builder.rs              | 12 ++----
 arrow/src/array/cast.rs                 |  2 +-
 arrow/src/array/equal/mod.rs            | 23 +++++------
 arrow/src/array/equal_json.rs           | 20 +++------
 arrow/src/array/iterator.rs             | 35 ++++++----------
 arrow/src/array/mod.rs                  |  2 -
 arrow/src/array/ord.rs                  |  2 +-
 arrow/src/array/transform/mod.rs        |  5 +--
 arrow/src/compute/kernels/aggregate.rs  | 12 ++----
 arrow/src/compute/kernels/cast.rs       | 24 +++++------
 arrow/src/compute/kernels/comparison.rs | 72 ++++++++++++++++-----------------
 arrow/src/compute/kernels/concat.rs     |  4 +-
 arrow/src/compute/kernels/filter.rs     |  4 +-
 arrow/src/compute/kernels/length.rs     | 16 ++++----
 arrow/src/compute/kernels/regexp.rs     |  5 +--
 arrow/src/compute/kernels/sort.rs       |  6 +--
 arrow/src/compute/kernels/substring.rs  | 16 ++++----
 arrow/src/compute/kernels/take.rs       |  6 +--
 arrow/src/ffi.rs                        | 13 +++---
 arrow/src/util/bench_util.rs            |  6 +--
 22 files changed, 174 insertions(+), 231 deletions(-)

diff --git a/arrow/src/array/array_binary.rs b/arrow/src/array/array_binary.rs
index 7ab7e63a4..b66224ae1 100644
--- a/arrow/src/array/array_binary.rs
+++ b/arrow/src/array/array_binary.rs
@@ -35,29 +35,23 @@ use crate::error::{ArrowError, Result};
 use crate::util::bit_util;
 use crate::{buffer::MutableBuffer, datatypes::DataType};
 
-/// Like [`OffsetSizeTrait`], but specialized for Binary.
-/// This allow us to expose a constant datatype for the [`GenericBinaryArray`].
-pub trait BinaryOffsetSizeTrait: OffsetSizeTrait {
-    const DATA_TYPE: DataType;
-}
-
-impl BinaryOffsetSizeTrait for i32 {
-    const DATA_TYPE: DataType = DataType::Binary;
-}
-
-impl BinaryOffsetSizeTrait for i64 {
-    const DATA_TYPE: DataType = DataType::LargeBinary;
-}
-
 /// See [`BinaryArray`] and [`LargeBinaryArray`] for storing
 /// binary data.
-pub struct GenericBinaryArray<OffsetSize: BinaryOffsetSizeTrait> {
+pub struct GenericBinaryArray<OffsetSize: OffsetSizeTrait> {
     data: ArrayData,
     value_offsets: RawPtrBox<OffsetSize>,
     value_data: RawPtrBox<u8>,
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> GenericBinaryArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> GenericBinaryArray<OffsetSize> {
+    pub fn get_data_type() -> DataType {
+        if OffsetSize::is_large() {
+            DataType::LargeBinary
+        } else {
+            DataType::Binary
+        }
+    }
+
     /// Returns the length for value at index `i`.
     #[inline]
     pub fn value_length(&self, i: usize) -> OffsetSize {
@@ -155,7 +149,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> 
GenericBinaryArray<OffsetSize> {
             "BinaryArray can only be created from List<u8> arrays, mismatched 
data types."
         );
 
-        let mut builder = ArrayData::builder(OffsetSize::DATA_TYPE)
+        let mut builder = ArrayData::builder(Self::get_data_type())
             .len(v.len())
             .add_buffer(v.data_ref().buffers()[0].clone())
             .add_buffer(v.data_ref().child_data()[0].buffers()[0].clone());
@@ -195,7 +189,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> 
GenericBinaryArray<OffsetSize> {
         assert!(!offsets.is_empty()); // wrote at least one
         let actual_len = (offsets.len() / std::mem::size_of::<OffsetSize>()) - 
1;
 
-        let array_data = ArrayData::builder(OffsetSize::DATA_TYPE)
+        let array_data = ArrayData::builder(Self::get_data_type())
             .len(actual_len)
             .add_buffer(offsets.into())
             .add_buffer(values.into());
@@ -223,14 +217,14 @@ impl<OffsetSize: BinaryOffsetSizeTrait> 
GenericBinaryArray<OffsetSize> {
     }
 }
 
-impl<'a, T: BinaryOffsetSizeTrait> GenericBinaryArray<T> {
+impl<'a, T: OffsetSizeTrait> GenericBinaryArray<T> {
     /// constructs a new iterator
     pub fn iter(&'a self) -> GenericBinaryIter<'a, T> {
         GenericBinaryIter::<'a, T>::new(self)
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> fmt::Debug for 
GenericBinaryArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> fmt::Debug for 
GenericBinaryArray<OffsetSize> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         let prefix = if OffsetSize::is_large() { "Large" } else { "" };
 
@@ -242,7 +236,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> fmt::Debug for 
GenericBinaryArray<Offset
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> Array for 
GenericBinaryArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> Array for GenericBinaryArray<OffsetSize> {
     fn as_any(&self) -> &dyn Any {
         self
     }
@@ -252,13 +246,11 @@ impl<OffsetSize: BinaryOffsetSizeTrait> Array for 
GenericBinaryArray<OffsetSize>
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> From<ArrayData>
-    for GenericBinaryArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> From<ArrayData> for 
GenericBinaryArray<OffsetSize> {
     fn from(data: ArrayData) -> Self {
         assert_eq!(
             data.data_type(),
-            &<OffsetSize as BinaryOffsetSizeTrait>::DATA_TYPE,
+            &Self::get_data_type(),
             "[Large]BinaryArray expects Datatype::[Large]Binary"
         );
         assert_eq!(
@@ -276,7 +268,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> From<ArrayData>
     }
 }
 
-impl<Ptr, OffsetSize: BinaryOffsetSizeTrait> FromIterator<Option<Ptr>>
+impl<Ptr, OffsetSize: OffsetSizeTrait> FromIterator<Option<Ptr>>
     for GenericBinaryArray<OffsetSize>
 where
     Ptr: AsRef<[u8]>,
@@ -309,7 +301,7 @@ where
 
         // calculate actual data_len, which may be different from the 
iterator's upper bound
         let data_len = offsets.len() - 1;
-        let array_data = ArrayData::builder(OffsetSize::DATA_TYPE)
+        let array_data = ArrayData::builder(Self::get_data_type())
             .len(data_len)
             .add_buffer(Buffer::from_slice_ref(&offsets))
             .add_buffer(Buffer::from_slice_ref(&values))
@@ -399,7 +391,7 @@ pub type BinaryArray = GenericBinaryArray<i32>;
 ///
 pub type LargeBinaryArray = GenericBinaryArray<i64>;
 
-impl<'a, T: BinaryOffsetSizeTrait> IntoIterator for &'a GenericBinaryArray<T> {
+impl<'a, T: OffsetSizeTrait> IntoIterator for &'a GenericBinaryArray<T> {
     type Item = Option<&'a [u8]>;
     type IntoIter = GenericBinaryIter<'a, T>;
 
@@ -408,7 +400,7 @@ impl<'a, T: BinaryOffsetSizeTrait> IntoIterator for &'a 
GenericBinaryArray<T> {
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> From<Vec<Option<&[u8]>>>
+impl<OffsetSize: OffsetSizeTrait> From<Vec<Option<&[u8]>>>
     for GenericBinaryArray<OffsetSize>
 {
     fn from(v: Vec<Option<&[u8]>>) -> Self {
@@ -416,15 +408,13 @@ impl<OffsetSize: BinaryOffsetSizeTrait> 
From<Vec<Option<&[u8]>>>
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> From<Vec<&[u8]>>
-    for GenericBinaryArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> From<Vec<&[u8]>> for 
GenericBinaryArray<OffsetSize> {
     fn from(v: Vec<&[u8]>) -> Self {
         Self::from_iter_values(v)
     }
 }
 
-impl<T: BinaryOffsetSizeTrait> From<GenericListArray<T>> for 
GenericBinaryArray<T> {
+impl<T: OffsetSizeTrait> From<GenericListArray<T>> for GenericBinaryArray<T> {
     fn from(v: GenericListArray<T>) -> Self {
         Self::from_list(v)
     }
@@ -1295,7 +1285,7 @@ mod tests {
         }
     }
 
-    fn test_generic_binary_array_from_opt_vec<T: BinaryOffsetSizeTrait>() {
+    fn test_generic_binary_array_from_opt_vec<T: OffsetSizeTrait>() {
         let values: Vec<Option<&[u8]>> =
             vec![Some(b"one"), Some(b"two"), None, Some(b""), Some(b"three")];
         let array = GenericBinaryArray::<T>::from_opt_vec(values);
diff --git a/arrow/src/array/array_string.rs b/arrow/src/array/array_string.rs
index ba3ee373c..2d26a22dd 100644
--- a/arrow/src/array/array_string.rs
+++ b/arrow/src/array/array_string.rs
@@ -27,31 +27,25 @@ use crate::buffer::Buffer;
 use crate::util::bit_util;
 use crate::{buffer::MutableBuffer, datatypes::DataType};
 
-/// Like [`OffsetSizeTrait`], but specialized for Strings.
-/// This allow us to expose a constant datatype for the [`GenericStringArray`].
-pub trait StringOffsetSizeTrait: OffsetSizeTrait {
-    const DATA_TYPE: DataType;
-}
-
-impl StringOffsetSizeTrait for i32 {
-    const DATA_TYPE: DataType = DataType::Utf8;
-}
-
-impl StringOffsetSizeTrait for i64 {
-    const DATA_TYPE: DataType = DataType::LargeUtf8;
-}
-
 /// Generic struct for \[Large\]StringArray
 ///
 /// See [`StringArray`] and [`LargeStringArray`] for storing
 /// specific string data.
-pub struct GenericStringArray<OffsetSize: StringOffsetSizeTrait> {
+pub struct GenericStringArray<OffsetSize: OffsetSizeTrait> {
     data: ArrayData,
     value_offsets: RawPtrBox<OffsetSize>,
     value_data: RawPtrBox<u8>,
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> GenericStringArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> GenericStringArray<OffsetSize> {
+    pub fn get_data_type() -> DataType {
+        if OffsetSize::is_large() {
+            DataType::LargeUtf8
+        } else {
+            DataType::Utf8
+        }
+    }
+
     /// Returns the length for the element at index `i`.
     #[inline]
     pub fn value_length(&self, i: usize) -> OffsetSize {
@@ -134,7 +128,7 @@ impl<OffsetSize: StringOffsetSizeTrait> 
GenericStringArray<OffsetSize> {
             "StringArray can only be created from List<u8> arrays, mismatched 
data types."
         );
 
-        let mut builder = ArrayData::builder(OffsetSize::DATA_TYPE)
+        let mut builder = ArrayData::builder(Self::get_data_type())
             .len(v.len())
             .add_buffer(v.data().buffers()[0].clone())
             .add_buffer(v.data().child_data()[0].buffers()[0].clone());
@@ -174,7 +168,7 @@ impl<OffsetSize: StringOffsetSizeTrait> 
GenericStringArray<OffsetSize> {
         assert!(!offsets.is_empty()); // wrote at least one
         let actual_len = (offsets.len() / std::mem::size_of::<OffsetSize>()) - 
1;
 
-        let array_data = ArrayData::builder(OffsetSize::DATA_TYPE)
+        let array_data = ArrayData::builder(Self::get_data_type())
             .len(actual_len)
             .add_buffer(offsets.into())
             .add_buffer(values.into());
@@ -202,7 +196,7 @@ impl<OffsetSize: StringOffsetSizeTrait> 
GenericStringArray<OffsetSize> {
     }
 }
 
-impl<'a, Ptr, OffsetSize: StringOffsetSizeTrait> FromIterator<&'a Option<Ptr>>
+impl<'a, Ptr, OffsetSize: OffsetSizeTrait> FromIterator<&'a Option<Ptr>>
     for GenericStringArray<OffsetSize>
 where
     Ptr: AsRef<str> + 'a,
@@ -216,7 +210,7 @@ where
     }
 }
 
-impl<'a, Ptr, OffsetSize: StringOffsetSizeTrait> FromIterator<Option<Ptr>>
+impl<'a, Ptr, OffsetSize: OffsetSizeTrait> FromIterator<Option<Ptr>>
     for GenericStringArray<OffsetSize>
 where
     Ptr: AsRef<str>,
@@ -251,7 +245,7 @@ where
 
         // calculate actual data_len, which may be different from the 
iterator's upper bound
         let data_len = (offsets.len() / offset_size) - 1;
-        let array_data = ArrayData::builder(OffsetSize::DATA_TYPE)
+        let array_data = ArrayData::builder(Self::get_data_type())
             .len(data_len)
             .add_buffer(offsets.into())
             .add_buffer(values.into())
@@ -261,7 +255,7 @@ where
     }
 }
 
-impl<'a, T: StringOffsetSizeTrait> IntoIterator for &'a GenericStringArray<T> {
+impl<'a, T: OffsetSizeTrait> IntoIterator for &'a GenericStringArray<T> {
     type Item = Option<&'a str>;
     type IntoIter = GenericStringIter<'a, T>;
 
@@ -270,14 +264,14 @@ impl<'a, T: StringOffsetSizeTrait> IntoIterator for &'a 
GenericStringArray<T> {
     }
 }
 
-impl<'a, T: StringOffsetSizeTrait> GenericStringArray<T> {
+impl<'a, T: OffsetSizeTrait> GenericStringArray<T> {
     /// constructs a new iterator
     pub fn iter(&'a self) -> GenericStringIter<'a, T> {
         GenericStringIter::<'a, T>::new(self)
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> fmt::Debug for 
GenericStringArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> fmt::Debug for 
GenericStringArray<OffsetSize> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         let prefix = if OffsetSize::is_large() { "Large" } else { "" };
 
@@ -289,7 +283,7 @@ impl<OffsetSize: StringOffsetSizeTrait> fmt::Debug for 
GenericStringArray<Offset
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> Array for 
GenericStringArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> Array for GenericStringArray<OffsetSize> {
     fn as_any(&self) -> &dyn Any {
         self
     }
@@ -299,13 +293,11 @@ impl<OffsetSize: StringOffsetSizeTrait> Array for 
GenericStringArray<OffsetSize>
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> From<ArrayData>
-    for GenericStringArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> From<ArrayData> for 
GenericStringArray<OffsetSize> {
     fn from(data: ArrayData) -> Self {
         assert_eq!(
             data.data_type(),
-            &<OffsetSize as StringOffsetSizeTrait>::DATA_TYPE,
+            &Self::get_data_type(),
             "[Large]StringArray expects Datatype::[Large]Utf8"
         );
         assert_eq!(
@@ -323,7 +315,7 @@ impl<OffsetSize: StringOffsetSizeTrait> From<ArrayData>
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> From<Vec<Option<&str>>>
+impl<OffsetSize: OffsetSizeTrait> From<Vec<Option<&str>>>
     for GenericStringArray<OffsetSize>
 {
     fn from(v: Vec<Option<&str>>) -> Self {
@@ -331,17 +323,13 @@ impl<OffsetSize: StringOffsetSizeTrait> 
From<Vec<Option<&str>>>
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> From<Vec<&str>>
-    for GenericStringArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> From<Vec<&str>> for 
GenericStringArray<OffsetSize> {
     fn from(v: Vec<&str>) -> Self {
         Self::from_iter_values(v)
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> From<Vec<String>>
-    for GenericStringArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> From<Vec<String>> for 
GenericStringArray<OffsetSize> {
     fn from(v: Vec<String>) -> Self {
         Self::from_iter_values(v)
     }
@@ -371,7 +359,7 @@ pub type StringArray = GenericStringArray<i32>;
 /// ```
 pub type LargeStringArray = GenericStringArray<i64>;
 
-impl<T: StringOffsetSizeTrait> From<GenericListArray<T>> for 
GenericStringArray<T> {
+impl<T: OffsetSizeTrait> From<GenericListArray<T>> for GenericStringArray<T> {
     fn from(v: GenericListArray<T>) -> Self {
         GenericStringArray::<T>::from_list(v)
     }
diff --git a/arrow/src/array/builder.rs b/arrow/src/array/builder.rs
index cece334f6..369285df1 100644
--- a/arrow/src/array/builder.rs
+++ b/arrow/src/array/builder.rs
@@ -1165,9 +1165,7 @@ pub struct DecimalBuilder {
     scale: usize,
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> ArrayBuilder
-    for GenericBinaryBuilder<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> ArrayBuilder for 
GenericBinaryBuilder<OffsetSize> {
     /// Returns the builder as a non-mutable `Any` reference.
     fn as_any(&self) -> &dyn Any {
         self
@@ -1199,9 +1197,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> ArrayBuilder
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> ArrayBuilder
-    for GenericStringBuilder<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> ArrayBuilder for 
GenericStringBuilder<OffsetSize> {
     /// Returns the builder as a non-mutable `Any` reference.
     fn as_any(&self) -> &dyn Any {
         self
@@ -1298,7 +1294,7 @@ impl ArrayBuilder for DecimalBuilder {
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> GenericBinaryBuilder<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> GenericBinaryBuilder<OffsetSize> {
     /// Creates a new `GenericBinaryBuilder`, `capacity` is the number of 
bytes in the values
     /// array
     pub fn new(capacity: usize) -> Self {
@@ -1347,7 +1343,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> 
GenericBinaryBuilder<OffsetSize> {
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> GenericStringBuilder<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> GenericStringBuilder<OffsetSize> {
     /// Creates a new `StringBuilder`,
     /// `capacity` is the number of bytes of string data to pre-allocate space 
for in this builder
     pub fn new(capacity: usize) -> Self {
diff --git a/arrow/src/array/cast.rs b/arrow/src/array/cast.rs
index 6897e1886..d0b77a0d2 100644
--- a/arrow/src/array/cast.rs
+++ b/arrow/src/array/cast.rs
@@ -63,7 +63,7 @@ pub fn as_large_list_array(arr: &dyn Array) -> 
&LargeListArray {
 
 #[doc = "Force downcast ArrayRef to GenericBinaryArray"]
 #[inline]
-pub fn as_generic_binary_array<S: BinaryOffsetSizeTrait>(
+pub fn as_generic_binary_array<S: OffsetSizeTrait>(
     arr: &dyn Array,
 ) -> &GenericBinaryArray<S> {
     arr.as_any()
diff --git a/arrow/src/array/equal/mod.rs b/arrow/src/array/equal/mod.rs
index f5f0d60c7..1a6b9f331 100644
--- a/arrow/src/array/equal/mod.rs
+++ b/arrow/src/array/equal/mod.rs
@@ -20,10 +20,9 @@
 //! depend on dynamic casting of `Array`.
 
 use super::{
-    Array, ArrayData, BinaryOffsetSizeTrait, BooleanArray, DecimalArray, 
DictionaryArray,
-    FixedSizeBinaryArray, FixedSizeListArray, GenericBinaryArray, 
GenericListArray,
-    GenericStringArray, MapArray, NullArray, OffsetSizeTrait, PrimitiveArray,
-    StringOffsetSizeTrait, StructArray,
+    Array, ArrayData, BooleanArray, DecimalArray, DictionaryArray, 
FixedSizeBinaryArray,
+    FixedSizeListArray, GenericBinaryArray, GenericListArray, 
GenericStringArray,
+    MapArray, NullArray, OffsetSizeTrait, PrimitiveArray, StructArray,
 };
 use crate::datatypes::{ArrowPrimitiveType, DataType, IntervalUnit};
 use half::f16;
@@ -92,13 +91,13 @@ impl PartialEq for BooleanArray {
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> PartialEq for 
GenericStringArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> PartialEq for GenericStringArray<OffsetSize> 
{
     fn eq(&self, other: &Self) -> bool {
         equal(self.data(), other.data())
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> PartialEq for 
GenericBinaryArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> PartialEq for GenericBinaryArray<OffsetSize> 
{
     fn eq(&self, other: &Self) -> bool {
         equal(self.data(), other.data())
     }
@@ -261,10 +260,10 @@ mod tests {
     use std::sync::Arc;
 
     use crate::array::{
-        array::Array, ArrayData, ArrayDataBuilder, ArrayRef, 
BinaryOffsetSizeTrait,
-        BooleanArray, FixedSizeBinaryBuilder, FixedSizeListBuilder, 
GenericBinaryArray,
-        Int32Builder, ListBuilder, NullArray, PrimitiveBuilder, StringArray,
-        StringDictionaryBuilder, StringOffsetSizeTrait, StructArray, 
UnionBuilder,
+        array::Array, ArrayData, ArrayDataBuilder, ArrayRef, BooleanArray,
+        FixedSizeBinaryBuilder, FixedSizeListBuilder, GenericBinaryArray, 
Int32Builder,
+        ListBuilder, NullArray, PrimitiveBuilder, StringArray, 
StringDictionaryBuilder,
+        StructArray, UnionBuilder,
     };
     use crate::array::{GenericStringArray, Int32Array};
     use crate::buffer::Buffer;
@@ -506,7 +505,7 @@ mod tests {
         ]
     }
 
-    fn test_generic_string_equal<OffsetSize: StringOffsetSizeTrait>() {
+    fn test_generic_string_equal<OffsetSize: OffsetSizeTrait>() {
         let cases = binary_cases();
 
         for (lhs, rhs, expected) in cases {
@@ -528,7 +527,7 @@ mod tests {
         test_generic_string_equal::<i64>()
     }
 
-    fn test_generic_binary_equal<OffsetSize: BinaryOffsetSizeTrait>() {
+    fn test_generic_binary_equal<OffsetSize: OffsetSizeTrait>() {
         let cases = binary_cases();
 
         for (lhs, rhs, expected) in cases {
diff --git a/arrow/src/array/equal_json.rs b/arrow/src/array/equal_json.rs
index 85ace901c..64f109df5 100644
--- a/arrow/src/array/equal_json.rs
+++ b/arrow/src/array/equal_json.rs
@@ -251,7 +251,7 @@ impl PartialEq<MapArray> for Value {
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> JsonEqual for 
GenericBinaryArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> JsonEqual for GenericBinaryArray<OffsetSize> 
{
     fn equals_json(&self, json: &[&Value]) -> bool {
         if self.len() != json.len() {
             return false;
@@ -271,9 +271,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> JsonEqual for 
GenericBinaryArray<OffsetS
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> PartialEq<Value>
-    for GenericBinaryArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> PartialEq<Value> for 
GenericBinaryArray<OffsetSize> {
     fn eq(&self, json: &Value) -> bool {
         match json {
             Value::Array(json_array) => self.equals_json_values(json_array),
@@ -282,9 +280,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> PartialEq<Value>
     }
 }
 
-impl<OffsetSize: BinaryOffsetSizeTrait> 
PartialEq<GenericBinaryArray<OffsetSize>>
-    for Value
-{
+impl<OffsetSize: OffsetSizeTrait> PartialEq<GenericBinaryArray<OffsetSize>> 
for Value {
     fn eq(&self, arrow: &GenericBinaryArray<OffsetSize>) -> bool {
         match self {
             Value::Array(json_array) => arrow.equals_json_values(json_array),
@@ -293,7 +289,7 @@ impl<OffsetSize: BinaryOffsetSizeTrait> 
PartialEq<GenericBinaryArray<OffsetSize>
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> JsonEqual for 
GenericStringArray<OffsetSize> {
+impl<OffsetSize: OffsetSizeTrait> JsonEqual for GenericStringArray<OffsetSize> 
{
     fn equals_json(&self, json: &[&Value]) -> bool {
         if self.len() != json.len() {
             return false;
@@ -307,9 +303,7 @@ impl<OffsetSize: StringOffsetSizeTrait> JsonEqual for 
GenericStringArray<OffsetS
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> PartialEq<Value>
-    for GenericStringArray<OffsetSize>
-{
+impl<OffsetSize: OffsetSizeTrait> PartialEq<Value> for 
GenericStringArray<OffsetSize> {
     fn eq(&self, json: &Value) -> bool {
         match json {
             Value::Array(json_array) => self.equals_json_values(json_array),
@@ -318,9 +312,7 @@ impl<OffsetSize: StringOffsetSizeTrait> PartialEq<Value>
     }
 }
 
-impl<OffsetSize: StringOffsetSizeTrait> 
PartialEq<GenericStringArray<OffsetSize>>
-    for Value
-{
+impl<OffsetSize: OffsetSizeTrait> PartialEq<GenericStringArray<OffsetSize>> 
for Value {
     fn eq(&self, arrow: &GenericStringArray<OffsetSize>) -> bool {
         match self {
             Value::Array(json_array) => arrow.equals_json_values(json_array),
diff --git a/arrow/src/array/iterator.rs b/arrow/src/array/iterator.rs
index 5560ea91f..18bdca621 100644
--- a/arrow/src/array/iterator.rs
+++ b/arrow/src/array/iterator.rs
@@ -18,9 +18,8 @@
 use crate::datatypes::ArrowPrimitiveType;
 
 use super::{
-    Array, ArrayRef, BinaryOffsetSizeTrait, BooleanArray, DecimalArray,
-    GenericBinaryArray, GenericListArray, GenericStringArray, OffsetSizeTrait,
-    PrimitiveArray, StringOffsetSizeTrait,
+    Array, ArrayRef, BooleanArray, DecimalArray, GenericBinaryArray, 
GenericListArray,
+    GenericStringArray, OffsetSizeTrait, PrimitiveArray,
 };
 
 /// an iterator that returns Some(T) or None, that can be used on any 
PrimitiveArray
@@ -172,14 +171,14 @@ impl<'a> std::iter::ExactSizeIterator for BooleanIter<'a> 
{}
 #[derive(Debug)]
 pub struct GenericStringIter<'a, T>
 where
-    T: StringOffsetSizeTrait,
+    T: OffsetSizeTrait,
 {
     array: &'a GenericStringArray<T>,
     current: usize,
     current_end: usize,
 }
 
-impl<'a, T: StringOffsetSizeTrait> GenericStringIter<'a, T> {
+impl<'a, T: OffsetSizeTrait> GenericStringIter<'a, T> {
     /// create a new iterator
     pub fn new(array: &'a GenericStringArray<T>) -> Self {
         GenericStringIter::<T> {
@@ -190,7 +189,7 @@ impl<'a, T: StringOffsetSizeTrait> GenericStringIter<'a, T> 
{
     }
 }
 
-impl<'a, T: StringOffsetSizeTrait> std::iter::Iterator for 
GenericStringIter<'a, T> {
+impl<'a, T: OffsetSizeTrait> std::iter::Iterator for GenericStringIter<'a, T> {
     type Item = Option<&'a str>;
 
     fn next(&mut self) -> Option<Self::Item> {
@@ -219,9 +218,7 @@ impl<'a, T: StringOffsetSizeTrait> std::iter::Iterator for 
GenericStringIter<'a,
     }
 }
 
-impl<'a, T: StringOffsetSizeTrait> std::iter::DoubleEndedIterator
-    for GenericStringIter<'a, T>
-{
+impl<'a, T: OffsetSizeTrait> std::iter::DoubleEndedIterator for 
GenericStringIter<'a, T> {
     fn next_back(&mut self) -> Option<Self::Item> {
         if self.current_end == self.current {
             None
@@ -242,23 +239,20 @@ impl<'a, T: StringOffsetSizeTrait> 
std::iter::DoubleEndedIterator
 }
 
 /// all arrays have known size.
-impl<'a, T: StringOffsetSizeTrait> std::iter::ExactSizeIterator
-    for GenericStringIter<'a, T>
-{
-}
+impl<'a, T: OffsetSizeTrait> std::iter::ExactSizeIterator for 
GenericStringIter<'a, T> {}
 
 /// an iterator that returns `Some(&[u8])` or `None`, for binary arrays
 #[derive(Debug)]
 pub struct GenericBinaryIter<'a, T>
 where
-    T: BinaryOffsetSizeTrait,
+    T: OffsetSizeTrait,
 {
     array: &'a GenericBinaryArray<T>,
     current: usize,
     current_end: usize,
 }
 
-impl<'a, T: BinaryOffsetSizeTrait> GenericBinaryIter<'a, T> {
+impl<'a, T: OffsetSizeTrait> GenericBinaryIter<'a, T> {
     /// create a new iterator
     pub fn new(array: &'a GenericBinaryArray<T>) -> Self {
         GenericBinaryIter::<T> {
@@ -269,7 +263,7 @@ impl<'a, T: BinaryOffsetSizeTrait> GenericBinaryIter<'a, T> 
{
     }
 }
 
-impl<'a, T: BinaryOffsetSizeTrait> std::iter::Iterator for 
GenericBinaryIter<'a, T> {
+impl<'a, T: OffsetSizeTrait> std::iter::Iterator for GenericBinaryIter<'a, T> {
     type Item = Option<&'a [u8]>;
 
     fn next(&mut self) -> Option<Self::Item> {
@@ -298,9 +292,7 @@ impl<'a, T: BinaryOffsetSizeTrait> std::iter::Iterator for 
GenericBinaryIter<'a,
     }
 }
 
-impl<'a, T: BinaryOffsetSizeTrait> std::iter::DoubleEndedIterator
-    for GenericBinaryIter<'a, T>
-{
+impl<'a, T: OffsetSizeTrait> std::iter::DoubleEndedIterator for 
GenericBinaryIter<'a, T> {
     fn next_back(&mut self) -> Option<Self::Item> {
         if self.current_end == self.current {
             None
@@ -321,10 +313,7 @@ impl<'a, T: BinaryOffsetSizeTrait> 
std::iter::DoubleEndedIterator
 }
 
 /// all arrays have known size.
-impl<'a, T: BinaryOffsetSizeTrait> std::iter::ExactSizeIterator
-    for GenericBinaryIter<'a, T>
-{
-}
+impl<'a, T: OffsetSizeTrait> std::iter::ExactSizeIterator for 
GenericBinaryIter<'a, T> {}
 
 #[derive(Debug)]
 pub struct GenericListArrayIter<'a, S>
diff --git a/arrow/src/array/mod.rs b/arrow/src/array/mod.rs
index 628390214..0bd32d347 100644
--- a/arrow/src/array/mod.rs
+++ b/arrow/src/array/mod.rs
@@ -391,12 +391,10 @@ pub type DurationMillisecondArray = 
PrimitiveArray<DurationMillisecondType>;
 pub type DurationMicrosecondArray = PrimitiveArray<DurationMicrosecondType>;
 pub type DurationNanosecondArray = PrimitiveArray<DurationNanosecondType>;
 
-pub use self::array_binary::BinaryOffsetSizeTrait;
 pub use self::array_binary::GenericBinaryArray;
 pub use self::array_list::GenericListArray;
 pub use self::array_list::OffsetSizeTrait;
 pub use self::array_string::GenericStringArray;
-pub use self::array_string::StringOffsetSizeTrait;
 
 // --------------------- Array Builder ---------------------
 
diff --git a/arrow/src/array/ord.rs b/arrow/src/array/ord.rs
index c4ddc6953..be910f96b 100644
--- a/arrow/src/array/ord.rs
+++ b/arrow/src/array/ord.rs
@@ -72,7 +72,7 @@ where
 
 fn compare_string<T>(left: &dyn Array, right: &dyn Array) -> DynComparator
 where
-    T: StringOffsetSizeTrait,
+    T: OffsetSizeTrait,
 {
     let left: StringArray = StringArray::from(left.data().clone());
     let right: StringArray = StringArray::from(right.data().clone());
diff --git a/arrow/src/array/transform/mod.rs b/arrow/src/array/transform/mod.rs
index 76161eaa5..3eb5a86d3 100644
--- a/arrow/src/array/transform/mod.rs
+++ b/arrow/src/array/transform/mod.rs
@@ -17,9 +17,8 @@
 
 use super::{
     data::{into_buffers, new_buffers},
-    ArrayData, ArrayDataBuilder,
+    ArrayData, ArrayDataBuilder, OffsetSizeTrait,
 };
-use crate::array::StringOffsetSizeTrait;
 use crate::{
     buffer::MutableBuffer,
     datatypes::DataType,
@@ -333,7 +332,7 @@ fn build_extend_nulls(data_type: &DataType) -> ExtendNulls {
     })
 }
 
-fn preallocate_offset_and_binary_buffer<Offset: StringOffsetSizeTrait>(
+fn preallocate_offset_and_binary_buffer<Offset: OffsetSizeTrait>(
     capacity: usize,
     binary_size: usize,
 ) -> [MutableBuffer; 2] {
diff --git a/arrow/src/compute/kernels/aggregate.rs 
b/arrow/src/compute/kernels/aggregate.rs
index 043d8ff4d..83fce79c8 100644
--- a/arrow/src/compute/kernels/aggregate.rs
+++ b/arrow/src/compute/kernels/aggregate.rs
@@ -21,7 +21,7 @@ use multiversion::multiversion;
 use std::ops::Add;
 
 use crate::array::{
-    Array, BooleanArray, GenericStringArray, PrimitiveArray, 
StringOffsetSizeTrait,
+    Array, BooleanArray, GenericStringArray, OffsetSizeTrait, PrimitiveArray,
 };
 use crate::datatypes::{ArrowNativeType, ArrowNumericType};
 
@@ -35,7 +35,7 @@ fn is_nan<T: ArrowNativeType + PartialOrd + Copy>(a: T) -> 
bool {
 /// Helper function to perform min/max of strings
 fn min_max_string<T, F>(array: &GenericStringArray<T>, cmp: F) -> Option<&str>
 where
-    T: StringOffsetSizeTrait,
+    T: OffsetSizeTrait,
     F: Fn(&str, &str) -> bool,
 {
     let null_count = array.null_count();
@@ -80,16 +80,12 @@ where
 }
 
 /// Returns the maximum value in the string array, according to the natural 
order.
-pub fn max_string<T: StringOffsetSizeTrait>(
-    array: &GenericStringArray<T>,
-) -> Option<&str> {
+pub fn max_string<T: OffsetSizeTrait>(array: &GenericStringArray<T>) -> 
Option<&str> {
     min_max_string(array, |a, b| a < b)
 }
 
 /// Returns the minimum value in the string array, according to the natural 
order.
-pub fn min_string<T: StringOffsetSizeTrait>(
-    array: &GenericStringArray<T>,
-) -> Option<&str> {
+pub fn min_string<T: OffsetSizeTrait>(array: &GenericStringArray<T>) -> 
Option<&str> {
     min_max_string(array, |a, b| a > b)
 }
 
diff --git a/arrow/src/compute/kernels/cast.rs 
b/arrow/src/compute/kernels/cast.rs
index 50786f3d9..2c0ebb1e2 100644
--- a/arrow/src/compute/kernels/cast.rs
+++ b/arrow/src/compute/kernels/cast.rs
@@ -1345,7 +1345,7 @@ fn cast_timestamp_to_string<T, OffsetSize>(array: 
&ArrayRef) -> Result<ArrayRef>
 where
     T: ArrowTemporalType + ArrowNumericType,
     i64: From<<T as ArrowPrimitiveType>::Native>,
-    OffsetSize: StringOffsetSizeTrait,
+    OffsetSize: OffsetSizeTrait,
 {
     let array = array.as_any().downcast_ref::<PrimitiveArray<T>>().unwrap();
 
@@ -1363,7 +1363,7 @@ where
 }
 
 /// Cast date32 types to Utf8/LargeUtf8
-fn cast_date32_to_string<OffsetSize: StringOffsetSizeTrait>(
+fn cast_date32_to_string<OffsetSize: OffsetSizeTrait>(
     array: &ArrayRef,
 ) -> Result<ArrayRef> {
     let array = array.as_any().downcast_ref::<Date32Array>().unwrap();
@@ -1382,7 +1382,7 @@ fn cast_date32_to_string<OffsetSize: 
StringOffsetSizeTrait>(
 }
 
 /// Cast date64 types to Utf8/LargeUtf8
-fn cast_date64_to_string<OffsetSize: StringOffsetSizeTrait>(
+fn cast_date64_to_string<OffsetSize: OffsetSizeTrait>(
     array: &ArrayRef,
 ) -> Result<ArrayRef> {
     let array = array.as_any().downcast_ref::<Date64Array>().unwrap();
@@ -1405,7 +1405,7 @@ fn cast_numeric_to_string<FROM, OffsetSize>(array: 
&ArrayRef) -> Result<ArrayRef
 where
     FROM: ArrowNumericType,
     FROM::Native: lexical_core::ToLexical,
-    OffsetSize: StringOffsetSizeTrait,
+    OffsetSize: OffsetSizeTrait,
 {
     Ok(Arc::new(numeric_to_string_cast::<FROM, OffsetSize>(
         array
@@ -1421,7 +1421,7 @@ fn numeric_to_string_cast<T, OffsetSize>(
 where
     T: ArrowPrimitiveType + ArrowNumericType,
     T::Native: lexical_core::ToLexical,
-    OffsetSize: StringOffsetSizeTrait,
+    OffsetSize: OffsetSizeTrait,
 {
     from.iter()
         .map(|maybe_value| maybe_value.map(lexical_to_string))
@@ -1429,7 +1429,7 @@ where
 }
 
 /// Cast numeric types to Utf8
-fn cast_string_to_numeric<T, Offset: StringOffsetSizeTrait>(
+fn cast_string_to_numeric<T, Offset: OffsetSizeTrait>(
     from: &ArrayRef,
     cast_options: &CastOptions,
 ) -> Result<ArrayRef>
@@ -1445,7 +1445,7 @@ where
     )?))
 }
 
-fn string_to_numeric_cast<T, Offset: StringOffsetSizeTrait>(
+fn string_to_numeric_cast<T, Offset: OffsetSizeTrait>(
     from: &GenericStringArray<Offset>,
     cast_options: &CastOptions,
 ) -> Result<PrimitiveArray<T>>
@@ -1494,7 +1494,7 @@ where
 }
 
 /// Casts generic string arrays to Date32Array
-fn cast_string_to_date32<Offset: StringOffsetSizeTrait>(
+fn cast_string_to_date32<Offset: OffsetSizeTrait>(
     array: &dyn Array,
     cast_options: &CastOptions,
 ) -> Result<ArrayRef> {
@@ -1556,7 +1556,7 @@ fn cast_string_to_date32<Offset: StringOffsetSizeTrait>(
 }
 
 /// Casts generic string arrays to Date64Array
-fn cast_string_to_date64<Offset: StringOffsetSizeTrait>(
+fn cast_string_to_date64<Offset: OffsetSizeTrait>(
     array: &dyn Array,
     cast_options: &CastOptions,
 ) -> Result<ArrayRef> {
@@ -1617,7 +1617,7 @@ fn cast_string_to_date64<Offset: StringOffsetSizeTrait>(
 }
 
 /// Casts generic string arrays to TimeStampNanosecondArray
-fn cast_string_to_timestamp_ns<Offset: StringOffsetSizeTrait>(
+fn cast_string_to_timestamp_ns<Offset: OffsetSizeTrait>(
     array: &dyn Array,
     cast_options: &CastOptions,
 ) -> Result<ArrayRef> {
@@ -2047,8 +2047,8 @@ fn cast_list_inner<OffsetSize: OffsetSizeTrait>(
 /// a `Utf8` array it will return an Error.
 fn cast_str_container<OffsetSizeFrom, OffsetSizeTo>(array: &dyn Array) -> 
Result<ArrayRef>
 where
-    OffsetSizeFrom: StringOffsetSizeTrait + ToPrimitive,
-    OffsetSizeTo: StringOffsetSizeTrait + NumCast + ArrowNativeType,
+    OffsetSizeFrom: OffsetSizeTrait + ToPrimitive,
+    OffsetSizeTo: OffsetSizeTrait + NumCast + ArrowNativeType,
 {
     let str_array = array
         .as_any()
diff --git a/arrow/src/compute/kernels/comparison.rs 
b/arrow/src/compute/kernels/comparison.rs
index 115407636..a3ef387f3 100644
--- a/arrow/src/compute/kernels/comparison.rs
+++ b/arrow/src/compute/kernels/comparison.rs
@@ -246,7 +246,7 @@ fn regex_like<OffsetSize, F>(
     op: F,
 ) -> Result<BooleanArray>
 where
-    OffsetSize: StringOffsetSizeTrait,
+    OffsetSize: OffsetSizeTrait,
     F: Fn(&str) -> Result<Regex>,
 {
     let mut map = HashMap::new();
@@ -312,7 +312,7 @@ where
 /// let result = like_utf8(&strings, &patterns).unwrap();
 /// assert_eq!(result, BooleanArray::from(vec![true, false, false, true]));
 /// ```
-pub fn like_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn like_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -330,7 +330,7 @@ pub fn like_utf8<OffsetSize: StringOffsetSizeTrait>(
 /// [`LargeStringArray`] and a scalar.
 ///
 /// See the documentation on [`like_utf8`] for more details.
-pub fn like_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn like_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -398,7 +398,7 @@ pub fn like_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 /// [`LargeStringArray`].
 ///
 /// See the documentation on [`like_utf8`] for more details.
-pub fn nlike_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn nlike_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -416,7 +416,7 @@ pub fn nlike_utf8<OffsetSize: StringOffsetSizeTrait>(
 /// [`LargeStringArray`] and a scalar.
 ///
 /// See the documentation on [`like_utf8`] for more details.
-pub fn nlike_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn nlike_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -471,7 +471,7 @@ pub fn nlike_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 /// [`LargeStringArray`].
 ///
 /// See the documentation on [`like_utf8`] for more details.
-pub fn ilike_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn ilike_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -489,7 +489,7 @@ pub fn ilike_utf8<OffsetSize: StringOffsetSizeTrait>(
 /// [`LargeStringArray`] and a scalar.
 ///
 /// See the documentation on [`like_utf8`] for more details.
-pub fn ilike_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn ilike_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -555,7 +555,7 @@ pub fn ilike_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 /// special search modes, such as case insensitive and multi-line mode.
 /// See the documentation 
[here](https://docs.rs/regex/1.5.4/regex/#grouping-and-flags)
 /// for more information.
-pub fn regexp_is_match_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn regexp_is_match_utf8<OffsetSize: OffsetSizeTrait>(
     array: &GenericStringArray<OffsetSize>,
     regex_array: &GenericStringArray<OffsetSize>,
     flags_array: Option<&GenericStringArray<OffsetSize>>,
@@ -639,7 +639,7 @@ pub fn regexp_is_match_utf8<OffsetSize: 
StringOffsetSizeTrait>(
 /// [`LargeStringArray`] and a scalar.
 ///
 /// See the documentation on [`regexp_is_match_utf8`] for more details.
-pub fn regexp_is_match_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn regexp_is_match_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     array: &GenericStringArray<OffsetSize>,
     regex: &str,
     flag: Option<&str>,
@@ -682,7 +682,7 @@ pub fn regexp_is_match_utf8_scalar<OffsetSize: 
StringOffsetSizeTrait>(
 }
 
 /// Perform `left == right` operation on [`StringArray`] / 
[`LargeStringArray`].
-pub fn eq_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn eq_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -690,7 +690,7 @@ pub fn eq_utf8<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left == right` operation on [`StringArray`] / 
[`LargeStringArray`] and a scalar.
-pub fn eq_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn eq_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -811,7 +811,7 @@ pub fn neq_bool_scalar(left: &BooleanArray, right: bool) -> 
Result<BooleanArray>
 }
 
 /// Perform `left == right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`].
-pub fn eq_binary<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn eq_binary<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &GenericBinaryArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -819,7 +819,7 @@ pub fn eq_binary<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left == right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`] and a scalar
-pub fn eq_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn eq_binary_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &[u8],
 ) -> Result<BooleanArray> {
@@ -827,7 +827,7 @@ pub fn eq_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left != right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`].
-pub fn neq_binary<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn neq_binary<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &GenericBinaryArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -835,7 +835,7 @@ pub fn neq_binary<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left != right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`] and a scalar.
-pub fn neq_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn neq_binary_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &[u8],
 ) -> Result<BooleanArray> {
@@ -843,7 +843,7 @@ pub fn neq_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left < right` operation on [`BinaryArray`] / [`LargeBinaryArray`].
-pub fn lt_binary<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn lt_binary<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &GenericBinaryArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -851,7 +851,7 @@ pub fn lt_binary<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left < right` operation on [`BinaryArray`] / [`LargeBinaryArray`] 
and a scalar.
-pub fn lt_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn lt_binary_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &[u8],
 ) -> Result<BooleanArray> {
@@ -859,7 +859,7 @@ pub fn lt_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left <= right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`].
-pub fn lt_eq_binary<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn lt_eq_binary<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &GenericBinaryArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -867,7 +867,7 @@ pub fn lt_eq_binary<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left <= right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`] and a scalar.
-pub fn lt_eq_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn lt_eq_binary_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &[u8],
 ) -> Result<BooleanArray> {
@@ -875,7 +875,7 @@ pub fn lt_eq_binary_scalar<OffsetSize: 
BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left > right` operation on [`BinaryArray`] / [`LargeBinaryArray`].
-pub fn gt_binary<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn gt_binary<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &GenericBinaryArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -883,7 +883,7 @@ pub fn gt_binary<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left > right` operation on [`BinaryArray`] / [`LargeBinaryArray`] 
and a scalar.
-pub fn gt_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn gt_binary_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &[u8],
 ) -> Result<BooleanArray> {
@@ -891,7 +891,7 @@ pub fn gt_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left >= right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`].
-pub fn gt_eq_binary<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn gt_eq_binary<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &GenericBinaryArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -899,7 +899,7 @@ pub fn gt_eq_binary<OffsetSize: BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left >= right` operation on [`BinaryArray`] / 
[`LargeBinaryArray`] and a scalar.
-pub fn gt_eq_binary_scalar<OffsetSize: BinaryOffsetSizeTrait>(
+pub fn gt_eq_binary_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericBinaryArray<OffsetSize>,
     right: &[u8],
 ) -> Result<BooleanArray> {
@@ -907,7 +907,7 @@ pub fn gt_eq_binary_scalar<OffsetSize: 
BinaryOffsetSizeTrait>(
 }
 
 /// Perform `left != right` operation on [`StringArray`] / 
[`LargeStringArray`].
-pub fn neq_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn neq_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -915,7 +915,7 @@ pub fn neq_utf8<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left != right` operation on [`StringArray`] / 
[`LargeStringArray`] and a scalar.
-pub fn neq_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn neq_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -923,7 +923,7 @@ pub fn neq_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left < right` operation on [`StringArray`] / [`LargeStringArray`].
-pub fn lt_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn lt_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -931,7 +931,7 @@ pub fn lt_utf8<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left < right` operation on [`StringArray`] / [`LargeStringArray`] 
and a scalar.
-pub fn lt_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn lt_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -939,7 +939,7 @@ pub fn lt_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left <= right` operation on [`StringArray`] / 
[`LargeStringArray`].
-pub fn lt_eq_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn lt_eq_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -947,7 +947,7 @@ pub fn lt_eq_utf8<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left <= right` operation on [`StringArray`] / 
[`LargeStringArray`] and a scalar.
-pub fn lt_eq_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn lt_eq_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -955,7 +955,7 @@ pub fn lt_eq_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left > right` operation on [`StringArray`] / [`LargeStringArray`].
-pub fn gt_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn gt_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -963,7 +963,7 @@ pub fn gt_utf8<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left > right` operation on [`StringArray`] / [`LargeStringArray`] 
and a scalar.
-pub fn gt_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn gt_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -971,7 +971,7 @@ pub fn gt_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left >= right` operation on [`StringArray`] / 
[`LargeStringArray`].
-pub fn gt_eq_utf8<OffsetSize: StringOffsetSizeTrait>(
+pub fn gt_eq_utf8<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &GenericStringArray<OffsetSize>,
 ) -> Result<BooleanArray> {
@@ -979,7 +979,7 @@ pub fn gt_eq_utf8<OffsetSize: StringOffsetSizeTrait>(
 }
 
 /// Perform `left >= right` operation on [`StringArray`] / 
[`LargeStringArray`] and a scalar.
-pub fn gt_eq_utf8_scalar<OffsetSize: StringOffsetSizeTrait>(
+pub fn gt_eq_utf8_scalar<OffsetSize: OffsetSizeTrait>(
     left: &GenericStringArray<OffsetSize>,
     right: &str,
 ) -> Result<BooleanArray> {
@@ -2281,7 +2281,7 @@ where
 
 /// Perform the given operation on two `DictionaryArray`s which value type is
 /// `DataType::Utf8` or `DataType::LargeUtf8`.
-pub fn cmp_dict_utf8<K, OffsetSize: StringOffsetSizeTrait, F>(
+pub fn cmp_dict_utf8<K, OffsetSize: OffsetSizeTrait, F>(
     left: &DictionaryArray<K>,
     right: &DictionaryArray<K>,
     op: F,
@@ -2295,7 +2295,7 @@ where
 
 /// Perform the given operation on two `DictionaryArray`s which value type is
 /// `DataType::Binary` or `DataType::LargeBinary`.
-pub fn cmp_dict_binary<K, OffsetSize: BinaryOffsetSizeTrait, F>(
+pub fn cmp_dict_binary<K, OffsetSize: OffsetSizeTrait, F>(
     left: &DictionaryArray<K>,
     right: &DictionaryArray<K>,
     op: F,
@@ -2661,7 +2661,7 @@ pub fn contains_utf8<OffsetSize>(
     right: &ListArray,
 ) -> Result<BooleanArray>
 where
-    OffsetSize: StringOffsetSizeTrait,
+    OffsetSize: OffsetSizeTrait,
 {
     let left_len = left.len();
     if left_len != right.len() {
diff --git a/arrow/src/compute/kernels/concat.rs 
b/arrow/src/compute/kernels/concat.rs
index 294c6d4d5..a7a3ffc78 100644
--- a/arrow/src/compute/kernels/concat.rs
+++ b/arrow/src/compute/kernels/concat.rs
@@ -34,9 +34,7 @@ use crate::array::*;
 use crate::datatypes::DataType;
 use crate::error::{ArrowError, Result};
 
-fn compute_str_values_length<Offset: StringOffsetSizeTrait>(
-    arrays: &[&ArrayData],
-) -> usize {
+fn compute_str_values_length<Offset: OffsetSizeTrait>(arrays: &[&ArrayData]) 
-> usize {
     arrays
         .iter()
         .map(|&data| {
diff --git a/arrow/src/compute/kernels/filter.rs 
b/arrow/src/compute/kernels/filter.rs
index b4abcd5a4..ddfd0ee02 100644
--- a/arrow/src/compute/kernels/filter.rs
+++ b/arrow/src/compute/kernels/filter.rs
@@ -743,7 +743,7 @@ struct FilterString<'a, OffsetSize> {
 
 impl<'a, OffsetSize> FilterString<'a, OffsetSize>
 where
-    OffsetSize: Zero + AddAssign + StringOffsetSizeTrait,
+    OffsetSize: Zero + AddAssign + OffsetSizeTrait,
 {
     fn new(capacity: usize, array: &'a GenericStringArray<OffsetSize>) -> Self 
{
         let num_offsets_bytes = (capacity + 1) * 
std::mem::size_of::<OffsetSize>();
@@ -815,7 +815,7 @@ fn filter_string<OffsetSize>(
     predicate: &FilterPredicate,
 ) -> GenericStringArray<OffsetSize>
 where
-    OffsetSize: Zero + AddAssign + StringOffsetSizeTrait,
+    OffsetSize: Zero + AddAssign + OffsetSizeTrait,
 {
     let data = array.data();
     assert_eq!(data.buffers().len(), 2);
diff --git a/arrow/src/compute/kernels/length.rs 
b/arrow/src/compute/kernels/length.rs
index 60a48ef6a..e52035970 100644
--- a/arrow/src/compute/kernels/length.rs
+++ b/arrow/src/compute/kernels/length.rs
@@ -71,9 +71,9 @@ where
 
 fn length_binary<O, T>(array: &dyn Array) -> ArrayRef
 where
-    O: BinaryOffsetSizeTrait,
+    O: OffsetSizeTrait,
     T: ArrowPrimitiveType,
-    T::Native: BinaryOffsetSizeTrait,
+    T::Native: OffsetSizeTrait,
 {
     let array = array
         .as_any()
@@ -84,9 +84,9 @@ where
 
 fn length_string<O, T>(array: &dyn Array) -> ArrayRef
 where
-    O: StringOffsetSizeTrait,
+    O: OffsetSizeTrait,
     T: ArrowPrimitiveType,
-    T::Native: StringOffsetSizeTrait,
+    T::Native: OffsetSizeTrait,
 {
     let array = array
         .as_any()
@@ -97,9 +97,9 @@ where
 
 fn bit_length_binary<O, T>(array: &dyn Array) -> ArrayRef
 where
-    O: BinaryOffsetSizeTrait,
+    O: OffsetSizeTrait,
     T: ArrowPrimitiveType,
-    T::Native: BinaryOffsetSizeTrait,
+    T::Native: OffsetSizeTrait,
 {
     let array = array
         .as_any()
@@ -111,9 +111,9 @@ where
 
 fn bit_length_string<O, T>(array: &dyn Array) -> ArrayRef
 where
-    O: StringOffsetSizeTrait,
+    O: OffsetSizeTrait,
     T: ArrowPrimitiveType,
-    T::Native: StringOffsetSizeTrait,
+    T::Native: OffsetSizeTrait,
 {
     let array = array
         .as_any()
diff --git a/arrow/src/compute/kernels/regexp.rs 
b/arrow/src/compute/kernels/regexp.rs
index 5093dcede..081a6e193 100644
--- a/arrow/src/compute/kernels/regexp.rs
+++ b/arrow/src/compute/kernels/regexp.rs
@@ -19,8 +19,7 @@
 //! expression of a \[Large\]StringArray
 
 use crate::array::{
-    ArrayRef, GenericStringArray, GenericStringBuilder, ListBuilder,
-    StringOffsetSizeTrait,
+    ArrayRef, GenericStringArray, GenericStringBuilder, ListBuilder, 
OffsetSizeTrait,
 };
 use crate::error::{ArrowError, Result};
 use std::collections::HashMap;
@@ -30,7 +29,7 @@ use std::sync::Arc;
 use regex::Regex;
 
 /// Extract all groups matched by a regular expression for a given String 
array.
-pub fn regexp_match<OffsetSize: StringOffsetSizeTrait>(
+pub fn regexp_match<OffsetSize: OffsetSizeTrait>(
     array: &GenericStringArray<OffsetSize>,
     regex_array: &GenericStringArray<OffsetSize>,
     flags_array: Option<&GenericStringArray<OffsetSize>>,
diff --git a/arrow/src/compute/kernels/sort.rs 
b/arrow/src/compute/kernels/sort.rs
index 7e508dbae..140a57f33 100644
--- a/arrow/src/compute/kernels/sort.rs
+++ b/arrow/src/compute/kernels/sort.rs
@@ -614,7 +614,7 @@ fn insert_valid_values<T>(result_slice: &mut [u32], offset: 
usize, valids: &[(u3
 }
 
 /// Sort strings
-fn sort_string<Offset: StringOffsetSizeTrait>(
+fn sort_string<Offset: OffsetSizeTrait>(
     values: &ArrayRef,
     value_indices: Vec<u32>,
     null_indices: Vec<u32>,
@@ -779,7 +779,7 @@ fn sort_binary<S>(
     limit: Option<usize>,
 ) -> UInt32Array
 where
-    S: BinaryOffsetSizeTrait,
+    S: OffsetSizeTrait,
 {
     let mut valids: Vec<(u32, &[u8])> = values
         .as_any()
@@ -1343,7 +1343,7 @@ mod tests {
         }
 
         // Generic size binary array
-        fn make_generic_binary_array<S: BinaryOffsetSizeTrait>(
+        fn make_generic_binary_array<S: OffsetSizeTrait>(
             data: &[Option<Vec<u8>>],
         ) -> Arc<GenericBinaryArray<S>> {
             Arc::new(GenericBinaryArray::<S>::from_opt_vec(
diff --git a/arrow/src/compute/kernels/substring.rs 
b/arrow/src/compute/kernels/substring.rs
index 9d898fda0..a4d24435f 100644
--- a/arrow/src/compute/kernels/substring.rs
+++ b/arrow/src/compute/kernels/substring.rs
@@ -26,7 +26,7 @@ use crate::{
 };
 use std::cmp::Ordering;
 
-fn binary_substring<OffsetSize: BinaryOffsetSizeTrait>(
+fn binary_substring<OffsetSize: OffsetSizeTrait>(
     array: &GenericBinaryArray<OffsetSize>,
     start: OffsetSize,
     length: Option<OffsetSize>,
@@ -74,7 +74,7 @@ fn binary_substring<OffsetSize: BinaryOffsetSizeTrait>(
 
     let data = unsafe {
         ArrayData::new_unchecked(
-            <OffsetSize as BinaryOffsetSizeTrait>::DATA_TYPE,
+            GenericBinaryArray::<OffsetSize>::get_data_type(),
             array.len(),
             None,
             null_bit_buffer,
@@ -136,7 +136,7 @@ fn fixed_size_binary_substring(
 }
 
 /// substring by byte
-fn utf8_substring<OffsetSize: StringOffsetSizeTrait>(
+fn utf8_substring<OffsetSize: OffsetSizeTrait>(
     array: &GenericStringArray<OffsetSize>,
     start: OffsetSize,
     length: Option<OffsetSize>,
@@ -203,7 +203,7 @@ fn utf8_substring<OffsetSize: StringOffsetSizeTrait>(
 
     let data = unsafe {
         ArrayData::new_unchecked(
-            <OffsetSize as StringOffsetSizeTrait>::DATA_TYPE,
+            GenericStringArray::<OffsetSize>::get_data_type(),
             array.len(),
             None,
             null_bit_buffer,
@@ -305,7 +305,7 @@ mod tests {
     use super::*;
 
     #[allow(clippy::type_complexity)]
-    fn with_nulls_generic_binary<O: BinaryOffsetSizeTrait>() -> Result<()> {
+    fn with_nulls_generic_binary<O: OffsetSizeTrait>() -> Result<()> {
         let cases: Vec<(Vec<Option<&[u8]>>, i64, Option<u64>, 
Vec<Option<&[u8]>>)> = vec![
             // all-nulls array is always identical
             (vec![None, None, None], -1, Some(1), vec![None, None, None]),
@@ -376,7 +376,7 @@ mod tests {
     }
 
     #[allow(clippy::type_complexity)]
-    fn without_nulls_generic_binary<O: BinaryOffsetSizeTrait>() -> Result<()> {
+    fn without_nulls_generic_binary<O: OffsetSizeTrait>() -> Result<()> {
         let cases: Vec<(Vec<&[u8]>, i64, Option<u64>, Vec<&[u8]>)> = vec![
             // empty array is always identical
             (vec![b"", b"", b""], 2, Some(1), vec![b"", b"", b""]),
@@ -800,7 +800,7 @@ mod tests {
         Ok(())
     }
 
-    fn with_nulls_generic_string<O: StringOffsetSizeTrait>() -> Result<()> {
+    fn with_nulls_generic_string<O: OffsetSizeTrait>() -> Result<()> {
         let cases = vec![
             // all-nulls array is always identical
             (vec![None, None, None], 0, None, vec![None, None, None]),
@@ -870,7 +870,7 @@ mod tests {
         with_nulls_generic_string::<i64>()
     }
 
-    fn without_nulls_generic_string<O: StringOffsetSizeTrait>() -> Result<()> {
+    fn without_nulls_generic_string<O: OffsetSizeTrait>() -> Result<()> {
         let cases = vec![
             // empty array is always identical
             (vec!["", "", ""], 0, None, vec!["", "", ""]),
diff --git a/arrow/src/compute/kernels/take.rs 
b/arrow/src/compute/kernels/take.rs
index 55c3987f3..086cd47f3 100644
--- a/arrow/src/compute/kernels/take.rs
+++ b/arrow/src/compute/kernels/take.rs
@@ -679,7 +679,7 @@ fn take_string<OffsetSize, IndexType>(
     indices: &PrimitiveArray<IndexType>,
 ) -> Result<GenericStringArray<OffsetSize>>
 where
-    OffsetSize: Zero + AddAssign + StringOffsetSizeTrait,
+    OffsetSize: Zero + AddAssign + OffsetSizeTrait,
     IndexType: ArrowNumericType,
     IndexType::Native: ToPrimitive,
 {
@@ -778,7 +778,7 @@ where
     }
 
     let mut array_data =
-        ArrayData::builder(<OffsetSize as StringOffsetSizeTrait>::DATA_TYPE)
+        ArrayData::builder(GenericStringArray::<OffsetSize>::get_data_type())
             .len(data_len)
             .add_buffer(offsets_buffer.into())
             .add_buffer(values.into());
@@ -889,7 +889,7 @@ fn take_binary<IndexType, OffsetType>(
     indices: &PrimitiveArray<IndexType>,
 ) -> Result<GenericBinaryArray<OffsetType>>
 where
-    OffsetType: BinaryOffsetSizeTrait,
+    OffsetType: OffsetSizeTrait,
     IndexType: ArrowNumericType,
     IndexType::Native: ToPrimitive,
 {
diff --git a/arrow/src/ffi.rs b/arrow/src/ffi.rs
index ccd774ac4..1fd706c36 100644
--- a/arrow/src/ffi.rs
+++ b/arrow/src/ffi.rs
@@ -872,11 +872,10 @@ impl<'a> ArrowArrayChild<'a> {
 mod tests {
     use super::*;
     use crate::array::{
-        export_array_into_raw, make_array, Array, ArrayData, 
BinaryOffsetSizeTrait,
-        BooleanArray, DecimalArray, DictionaryArray, FixedSizeBinaryArray,
-        FixedSizeListArray, GenericBinaryArray, GenericListArray, 
GenericStringArray,
-        Int32Array, OffsetSizeTrait, StringOffsetSizeTrait, 
Time32MillisecondArray,
-        TimestampMillisecondArray,
+        export_array_into_raw, make_array, Array, ArrayData, BooleanArray, 
DecimalArray,
+        DictionaryArray, FixedSizeBinaryArray, FixedSizeListArray, 
GenericBinaryArray,
+        GenericListArray, GenericStringArray, Int32Array, OffsetSizeTrait,
+        Time32MillisecondArray, TimestampMillisecondArray,
     };
     use crate::compute::kernels;
     use crate::datatypes::{Field, Int8Type};
@@ -932,7 +931,7 @@ mod tests {
     }
     // case with nulls is tested in the docs, through the example on this 
module.
 
-    fn test_generic_string<Offset: StringOffsetSizeTrait>() -> Result<()> {
+    fn test_generic_string<Offset: OffsetSizeTrait>() -> Result<()> {
         // create an array natively
         let array =
             GenericStringArray::<Offset>::from(vec![Some("a"), None, 
Some("aaa")]);
@@ -1044,7 +1043,7 @@ mod tests {
         test_generic_list::<i64>()
     }
 
-    fn test_generic_binary<Offset: BinaryOffsetSizeTrait>() -> Result<()> {
+    fn test_generic_binary<Offset: OffsetSizeTrait>() -> Result<()> {
         // create an array natively
         let array: Vec<Option<&[u8]>> = vec![Some(b"a"), None, Some(b"aaa")];
         let array = GenericBinaryArray::<Offset>::from(array);
diff --git a/arrow/src/util/bench_util.rs b/arrow/src/util/bench_util.rs
index 0339244a7..395f3702d 100644
--- a/arrow/src/util/bench_util.rs
+++ b/arrow/src/util/bench_util.rs
@@ -91,7 +91,7 @@ where
 }
 
 /// Creates an random (but fixed-seeded) array of a given size and null density
-pub fn create_string_array<Offset: StringOffsetSizeTrait>(
+pub fn create_string_array<Offset: OffsetSizeTrait>(
     size: usize,
     null_density: f32,
 ) -> GenericStringArray<Offset> {
@@ -99,7 +99,7 @@ pub fn create_string_array<Offset: StringOffsetSizeTrait>(
 }
 
 /// Creates a random (but fixed-seeded) array of a given size, null density 
and length
-pub fn create_string_array_with_len<Offset: StringOffsetSizeTrait>(
+pub fn create_string_array_with_len<Offset: OffsetSizeTrait>(
     size: usize,
     null_density: f32,
     str_len: usize,
@@ -143,7 +143,7 @@ pub fn create_string_dict_array<K: ArrowDictionaryKeyType>(
 }
 
 /// Creates an random (but fixed-seeded) binary array of a given size and null 
density
-pub fn create_binary_array<Offset: BinaryOffsetSizeTrait>(
+pub fn create_binary_array<Offset: OffsetSizeTrait>(
     size: usize,
     null_density: f32,
 ) -> GenericBinaryArray<Offset> {

Reply via email to