You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by tu...@apache.org on 2022/04/17 08:38:01 UTC

[arrow-rs] branch master updated: Replace &Option with Option<&T> (#1571)

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 786792c75 Replace &Option<T>  with Option<&T> (#1571)
786792c75 is described below

commit 786792c750b893781939d8d507b464db09ccc634
Author: tfeda <36...@users.noreply.github.com>
AuthorDate: Sun Apr 17 04:37:56 2022 -0400

    Replace &Option<T>  with Option<&T> (#1571)
    
    * Convert &Option<T> arguments to Option<&T>
    
    * fix cargo fmt issues
    
    * Update FileMetaData created_by() to return Option<&str>, Fix integration test
---
 arrow-pyarrow-integration-testing/src/lib.rs |  2 +-
 arrow/benches/string_kernels.rs              |  7 ++++++-
 arrow/src/array/array_struct.rs              |  2 +-
 arrow/src/array/builder.rs                   |  4 ++--
 arrow/src/array/data.rs                      |  6 +++---
 arrow/src/array/equal/utils.rs               |  2 +-
 arrow/src/compute/kernels/boolean.rs         | 16 ++++++++--------
 arrow/src/compute/kernels/cast.rs            | 12 ++++++++----
 arrow/src/compute/kernels/substring.rs       | 14 +++++++-------
 arrow/src/csv/reader.rs                      |  6 +++---
 arrow/src/csv/writer.rs                      |  6 +++---
 arrow/src/datatypes/field.rs                 |  4 ++--
 arrow/src/datatypes/mod.rs                   |  4 ++--
 parquet/src/column/writer.rs                 | 16 +++++++---------
 parquet/src/file/metadata.rs                 |  4 ++--
 parquet/src/file/properties.rs               | 10 ++++++----
 parquet/src/file/serialized_reader.rs        |  4 ++--
 parquet/src/file/writer.rs                   |  2 +-
 parquet/src/schema/printer.rs                |  6 +++---
 19 files changed, 68 insertions(+), 59 deletions(-)

diff --git a/arrow-pyarrow-integration-testing/src/lib.rs b/arrow-pyarrow-integration-testing/src/lib.rs
index 082a72e9e..26c09d64d 100644
--- a/arrow-pyarrow-integration-testing/src/lib.rs
+++ b/arrow-pyarrow-integration-testing/src/lib.rs
@@ -70,7 +70,7 @@ fn substring(array: ArrayData, start: i64) -> PyResult<ArrayData> {
     let array = ArrayRef::from(array);
 
     // substring
-    let array = kernels::substring::substring(array.as_ref(), start, &None)?;
+    let array = kernels::substring::substring(array.as_ref(), start, None)?;
 
     Ok(array.data().to_owned())
 }
diff --git a/arrow/benches/string_kernels.rs b/arrow/benches/string_kernels.rs
index c5946c9a2..74139eb2a 100644
--- a/arrow/benches/string_kernels.rs
+++ b/arrow/benches/string_kernels.rs
@@ -26,7 +26,12 @@ use arrow::compute::kernels::substring::substring;
 use arrow::util::bench_util::*;
 
 fn bench_substring(arr: &StringArray, start: i64, length: usize) {
-    substring(criterion::black_box(arr), start, &Some(length as u64)).unwrap();
+    substring(
+        criterion::black_box(arr),
+        start,
+        Some(length as u64).as_ref(),
+    )
+    .unwrap();
 }
 
 fn add_benchmark(c: &mut Criterion) {
diff --git a/arrow/src/array/array_struct.rs b/arrow/src/array/array_struct.rs
index b82ee0381..936176f49 100644
--- a/arrow/src/array/array_struct.rs
+++ b/arrow/src/array/array_struct.rs
@@ -360,7 +360,7 @@ mod tests {
         assert_eq!(1, struct_data.null_count());
         assert_eq!(
             // 00001011
-            &Some(Bitmap::from(Buffer::from(&[11_u8]))),
+            Some(&Bitmap::from(Buffer::from(&[11_u8]))),
             struct_data.null_bitmap()
         );
 
diff --git a/arrow/src/array/builder.rs b/arrow/src/array/builder.rs
index 38017b588..e98627bae 100644
--- a/arrow/src/array/builder.rs
+++ b/arrow/src/array/builder.rs
@@ -3561,7 +3561,7 @@ mod tests {
         assert_eq!(4, struct_data.len());
         assert_eq!(1, struct_data.null_count());
         assert_eq!(
-            &Some(Bitmap::from(Buffer::from(&[11_u8]))),
+            Some(&Bitmap::from(Buffer::from(&[11_u8]))),
             struct_data.null_bitmap()
         );
 
@@ -3675,7 +3675,7 @@ mod tests {
         assert_eq!(3, map_data.len());
         assert_eq!(1, map_data.null_count());
         assert_eq!(
-            &Some(Bitmap::from(Buffer::from(&[5_u8]))),
+            Some(&Bitmap::from(Buffer::from(&[5_u8]))),
             map_data.null_bitmap()
         );
 
diff --git a/arrow/src/array/data.rs b/arrow/src/array/data.rs
index 989e29fec..2afc00b58 100644
--- a/arrow/src/array/data.rs
+++ b/arrow/src/array/data.rs
@@ -398,8 +398,8 @@ impl ArrayData {
 
     /// Returns a reference to the null bitmap of this array data
     #[inline]
-    pub const fn null_bitmap(&self) -> &Option<Bitmap> {
-        &self.null_bitmap
+    pub const fn null_bitmap(&self) -> Option<&Bitmap> {
+        self.null_bitmap.as_ref()
     }
 
     /// Returns a reference to the null buffer of this array data.
@@ -500,7 +500,7 @@ impl ArrayData {
                     .iter()
                     .map(|data| data.slice(offset, length))
                     .collect(),
-                null_bitmap: self.null_bitmap().clone(),
+                null_bitmap: self.null_bitmap().cloned(),
             };
 
             new_data
diff --git a/arrow/src/array/equal/utils.rs b/arrow/src/array/equal/utils.rs
index cf2eb3064..b6690f936 100644
--- a/arrow/src/array/equal/utils.rs
+++ b/arrow/src/array/equal/utils.rs
@@ -132,7 +132,7 @@ pub(super) fn child_logical_null_buffer(
             let ceil = bit_util::ceil(parent_len, 8);
             Bitmap::from(Buffer::from(vec![0b11111111; ceil]))
         });
-    let self_null_bitmap = child_data.null_bitmap().clone().unwrap_or_else(|| {
+    let self_null_bitmap = child_data.null_bitmap().cloned().unwrap_or_else(|| {
         let ceil = bit_util::ceil(child_data.len(), 8);
         Bitmap::from(Buffer::from(vec![0b11111111; ceil]))
     });
diff --git a/arrow/src/compute/kernels/boolean.rs b/arrow/src/compute/kernels/boolean.rs
index fd3539455..5f52d56bb 100644
--- a/arrow/src/compute/kernels/boolean.rs
+++ b/arrow/src/compute/kernels/boolean.rs
@@ -1010,7 +1010,7 @@ mod tests {
         let expected = BooleanArray::from(vec![false, false, false, false]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1023,7 +1023,7 @@ mod tests {
         let expected = BooleanArray::from(vec![false, false, false, false]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1035,7 +1035,7 @@ mod tests {
         let expected = BooleanArray::from(vec![true, true, true, true]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1048,7 +1048,7 @@ mod tests {
         let expected = BooleanArray::from(vec![true, true, true, true]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1060,7 +1060,7 @@ mod tests {
         let expected = BooleanArray::from(vec![false, true, false, true]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1091,7 +1091,7 @@ mod tests {
         let expected = BooleanArray::from(vec![false, true, false, true]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1103,7 +1103,7 @@ mod tests {
         let expected = BooleanArray::from(vec![true, false, true, false]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
@@ -1134,7 +1134,7 @@ mod tests {
         let expected = BooleanArray::from(vec![true, false, true, false]);
 
         assert_eq!(expected, res);
-        assert_eq!(&None, res.data_ref().null_bitmap());
+        assert_eq!(None, res.data_ref().null_bitmap());
     }
 
     #[test]
diff --git a/arrow/src/compute/kernels/cast.rs b/arrow/src/compute/kernels/cast.rs
index 25e0fa2f5..6fb2a4e90 100644
--- a/arrow/src/compute/kernels/cast.rs
+++ b/arrow/src/compute/kernels/cast.rs
@@ -1244,7 +1244,11 @@ where
             to_type,
             array.len(),
             Some(array.null_count()),
-            array.data().null_bitmap().clone().map(|bitmap| bitmap.bits),
+            array
+                .data()
+                .null_bitmap()
+                .cloned()
+                .map(|bitmap| bitmap.bits),
             array.data().offset(),
             array.data().buffers().to_vec(),
             vec![],
@@ -1730,7 +1734,7 @@ fn dictionary_cast<K: ArrowDictionaryKeyType>(
                     cast_keys
                         .data()
                         .null_bitmap()
-                        .clone()
+                        .cloned()
                         .map(|bitmap| bitmap.bits),
                     cast_keys.data().offset(),
                     cast_keys.data().buffers().to_vec(),
@@ -1948,7 +1952,7 @@ fn cast_primitive_to_list<OffsetSize: OffsetSizeTrait + NumCast>(
             cast_array
                 .data()
                 .null_bitmap()
-                .clone()
+                .cloned()
                 .map(|bitmap| bitmap.bits),
             0,
             vec![offsets.into()],
@@ -1976,7 +1980,7 @@ fn cast_list_inner<OffsetSize: OffsetSizeTrait>(
             to_type.clone(),
             array.len(),
             Some(data.null_count()),
-            data.null_bitmap().clone().map(|bitmap| bitmap.bits),
+            data.null_bitmap().cloned().map(|bitmap| bitmap.bits),
             array.offset(),
             // reuse offset buffer
             data.buffers().to_vec(),
diff --git a/arrow/src/compute/kernels/substring.rs b/arrow/src/compute/kernels/substring.rs
index c452a8a73..02d82dd0b 100644
--- a/arrow/src/compute/kernels/substring.rs
+++ b/arrow/src/compute/kernels/substring.rs
@@ -27,7 +27,7 @@ use crate::{
 fn generic_substring<OffsetSize: StringOffsetSizeTrait>(
     array: &GenericStringArray<OffsetSize>,
     start: OffsetSize,
-    length: &Option<OffsetSize>,
+    length: Option<&OffsetSize>,
 ) -> Result<ArrayRef> {
     let offsets = array.value_offsets();
     let null_bit_buffer = array.data_ref().null_buffer().cloned();
@@ -122,7 +122,7 @@ fn generic_substring<OffsetSize: StringOffsetSizeTrait>(
 /// # use arrow::array::StringArray;
 /// # use arrow::compute::kernels::substring::substring;
 /// let array = StringArray::from(vec![Some("E=mc²")]);
-/// let result = substring(&array, -1, &None).unwrap();
+/// let result = substring(&array, -1, None).unwrap();
 /// let result = result.as_any().downcast_ref::<StringArray>().unwrap();
 /// assert_eq!(result.value(0).as_bytes(), &[0x00B2]); // invalid utf-8 format
 /// # }
@@ -133,7 +133,7 @@ fn generic_substring<OffsetSize: StringOffsetSizeTrait>(
 pub fn substring(
     array: &dyn Array,
     start: i64,
-    length: &Option<u64>,
+    length: Option<&u64>,
 ) -> Result<ArrayRef> {
     match array.data_type() {
         DataType::LargeUtf8 => generic_substring(
@@ -142,7 +142,7 @@ pub fn substring(
                 .downcast_ref::<LargeStringArray>()
                 .expect("A large string is expected"),
             start,
-            &length.map(|e| e as i64),
+            length.map(|e| *e as i64).as_ref(),
         ),
         DataType::Utf8 => generic_substring(
             array
@@ -150,7 +150,7 @@ pub fn substring(
                 .downcast_ref::<StringArray>()
                 .expect("A string is expected"),
             start as i32,
-            &length.map(|e| e as i32),
+            length.map(|e| *e as i32).as_ref(),
         ),
         _ => Err(ArrowError::ComputeError(format!(
             "substring does not support type {:?}",
@@ -206,7 +206,7 @@ mod tests {
         cases.into_iter().try_for_each::<_, Result<()>>(
             |(array, start, length, expected)| {
                 let array = T::from(array);
-                let result: ArrayRef = substring(&array, start, &length)?;
+                let result: ArrayRef = substring(&array, start, length.as_ref())?;
                 assert_eq!(array.len(), result.len());
 
                 let result = result.as_any().downcast_ref::<T>().unwrap();
@@ -287,7 +287,7 @@ mod tests {
         cases.into_iter().try_for_each::<_, Result<()>>(
             |(array, start, length, expected)| {
                 let array = StringArray::from(array);
-                let result = substring(&array, start, &length)?;
+                let result = substring(&array, start, length.as_ref())?;
                 assert_eq!(array.len(), result.len());
                 let result = result.as_any().downcast_ref::<StringArray>().unwrap();
                 let expected = StringArray::from(expected);
diff --git a/arrow/src/csv/reader.rs b/arrow/src/csv/reader.rs
index 9e7df849d..d8841964b 100644
--- a/arrow/src/csv/reader.rs
+++ b/arrow/src/csv/reader.rs
@@ -509,7 +509,7 @@ impl<R: Read> Iterator for Reader<R> {
             &self.batch_records[..read_records],
             self.schema.fields(),
             Some(self.schema.metadata.clone()),
-            &self.projection,
+            self.projection.as_ref(),
             self.line_number,
             format,
         );
@@ -526,12 +526,12 @@ fn parse(
     rows: &[StringRecord],
     fields: &[Field],
     metadata: Option<std::collections::HashMap<String, String>>,
-    projection: &Option<Vec<usize>>,
+    projection: Option<&Vec<usize>>,
     line_number: usize,
     datetime_format: Option<&str>,
 ) -> Result<RecordBatch> {
     let projection: Vec<usize> = match projection {
-        Some(ref v) => v.clone(),
+        Some(v) => v.clone(),
         None => fields.iter().enumerate().map(|(i, _)| i).collect(),
     };
 
diff --git a/arrow/src/csv/writer.rs b/arrow/src/csv/writer.rs
index 813cc2d01..b7755fae3 100644
--- a/arrow/src/csv/writer.rs
+++ b/arrow/src/csv/writer.rs
@@ -221,7 +221,7 @@ impl<W: Write> Writer<W> {
                         .to_string()
                 }
                 DataType::Timestamp(time_unit, time_zone) => {
-                    self.handle_timestamp(time_unit, time_zone, row_index, col)?
+                    self.handle_timestamp(time_unit, time_zone.as_ref(), row_index, col)?
                 }
                 DataType::Decimal(..) => make_string_from_decimal(col, row_index)?,
                 t => {
@@ -242,7 +242,7 @@ impl<W: Write> Writer<W> {
     fn handle_timestamp(
         &self,
         time_unit: &TimeUnit,
-        _time_zone: &Option<String>,
+        _time_zone: Option<&String>,
         row_index: usize,
         col: &ArrayRef,
     ) -> Result<String> {
@@ -280,7 +280,7 @@ impl<W: Write> Writer<W> {
     fn handle_timestamp(
         &self,
         time_unit: &TimeUnit,
-        time_zone: &Option<String>,
+        time_zone: Option<&String>,
         row_index: usize,
         col: &ArrayRef,
     ) -> Result<String> {
diff --git a/arrow/src/datatypes/field.rs b/arrow/src/datatypes/field.rs
index c841216a5..6fccd2209 100644
--- a/arrow/src/datatypes/field.rs
+++ b/arrow/src/datatypes/field.rs
@@ -91,8 +91,8 @@ impl Field {
 
     /// Returns the immutable reference to the `Field`'s optional custom metadata.
     #[inline]
-    pub const fn metadata(&self) -> &Option<BTreeMap<String, String>> {
-        &self.metadata
+    pub const fn metadata(&self) -> Option<&BTreeMap<String, String>> {
+        self.metadata.as_ref()
     }
 
     /// Returns an immutable reference to the `Field`'s name.
diff --git a/arrow/src/datatypes/mod.rs b/arrow/src/datatypes/mod.rs
index 9864f79a3..2c7fc8183 100644
--- a/arrow/src/datatypes/mod.rs
+++ b/arrow/src/datatypes/mod.rs
@@ -1276,7 +1276,7 @@ mod tests {
         assert!(f1.try_merge(&f2).is_ok());
         assert!(f1.metadata().is_some());
         assert_eq!(
-            f1.metadata().clone().unwrap(),
+            f1.metadata().cloned().unwrap(),
             [
                 ("foo".to_string(), "bar".to_string()),
                 ("foo2".to_string(), "bar2".to_string())
@@ -1297,7 +1297,7 @@ mod tests {
         assert!(f1.try_merge(&f2).is_ok());
         assert!(f1.metadata().is_some());
         assert_eq!(
-            f1.metadata().clone().unwrap(),
+            f1.metadata().cloned().unwrap(),
             [("foo".to_string(), "bar".to_string())]
                 .iter()
                 .cloned()
diff --git a/parquet/src/column/writer.rs b/parquet/src/column/writer.rs
index 1db0ea0cc..27814669c 100644
--- a/parquet/src/column/writer.rs
+++ b/parquet/src/column/writer.rs
@@ -270,8 +270,8 @@ impl<T: DataType> ColumnWriterImpl<T> {
         values: &[T::T],
         def_levels: Option<&[i16]>,
         rep_levels: Option<&[i16]>,
-        min: &Option<T::T>,
-        max: &Option<T::T>,
+        min: Option<&T::T>,
+        max: Option<&T::T>,
         null_count: Option<u64>,
         distinct_count: Option<u64>,
     ) -> Result<usize> {
@@ -376,9 +376,7 @@ impl<T: DataType> ColumnWriterImpl<T> {
         def_levels: Option<&[i16]>,
         rep_levels: Option<&[i16]>,
     ) -> Result<usize> {
-        self.write_batch_internal(
-            values, def_levels, rep_levels, &None, &None, None, None,
-        )
+        self.write_batch_internal(values, def_levels, rep_levels, None, None, None, None)
     }
 
     /// Writer may optionally provide pre-calculated statistics for this batch, in which case we do
@@ -389,8 +387,8 @@ impl<T: DataType> ColumnWriterImpl<T> {
         values: &[T::T],
         def_levels: Option<&[i16]>,
         rep_levels: Option<&[i16]>,
-        min: &Option<T::T>,
-        max: &Option<T::T>,
+        min: Option<&T::T>,
+        max: Option<&T::T>,
         nulls_count: Option<u64>,
         distinct_count: Option<u64>,
     ) -> Result<usize> {
@@ -1487,8 +1485,8 @@ mod tests {
                 &[1, 2, 3, 4],
                 None,
                 None,
-                &Some(-17),
-                &Some(9000),
+                Some(&-17),
+                Some(&9000),
                 Some(21),
                 Some(55),
             )
diff --git a/parquet/src/file/metadata.rs b/parquet/src/file/metadata.rs
index e3de7fa7f..1d35d1963 100644
--- a/parquet/src/file/metadata.rs
+++ b/parquet/src/file/metadata.rs
@@ -139,8 +139,8 @@ impl FileMetaData {
     /// ```shell
     /// parquet-mr version 1.8.0 (build 0fda28af84b9746396014ad6a415b90592a98b3b)
     /// ```
-    pub fn created_by(&self) -> &Option<String> {
-        &self.created_by
+    pub fn created_by(&self) -> Option<&str> {
+        self.created_by.as_deref()
     }
 
     /// Returns key_value_metadata of this file.
diff --git a/parquet/src/file/properties.rs b/parquet/src/file/properties.rs
index b42516e97..2baf93933 100644
--- a/parquet/src/file/properties.rs
+++ b/parquet/src/file/properties.rs
@@ -145,8 +145,8 @@ impl WriterProperties {
     }
 
     /// Returns `key_value_metadata` KeyValue pairs.
-    pub fn key_value_metadata(&self) -> &Option<Vec<KeyValue>> {
-        &self.key_value_metadata
+    pub fn key_value_metadata(&self) -> Option<&Vec<KeyValue>> {
+        self.key_value_metadata.as_ref()
     }
 
     /// Returns encoding for a data page, when dictionary encoding is enabled.
@@ -523,7 +523,7 @@ mod tests {
         assert_eq!(props.max_row_group_size(), DEFAULT_MAX_ROW_GROUP_SIZE);
         assert_eq!(props.writer_version(), DEFAULT_WRITER_VERSION);
         assert_eq!(props.created_by(), DEFAULT_CREATED_BY);
-        assert_eq!(props.key_value_metadata(), &None);
+        assert_eq!(props.key_value_metadata(), None);
         assert_eq!(props.encoding(&ColumnPath::from("col")), None);
         assert_eq!(
             props.compression(&ColumnPath::from("col")),
@@ -631,7 +631,9 @@ mod tests {
         assert_eq!(props.created_by(), "default");
         assert_eq!(
             props.key_value_metadata(),
-            &Some(vec![KeyValue::new("key".to_string(), "value".to_string(),)])
+            Some(&vec![
+                KeyValue::new("key".to_string(), "value".to_string(),)
+            ])
         );
 
         assert_eq!(
diff --git a/parquet/src/file/serialized_reader.rs b/parquet/src/file/serialized_reader.rs
index 012cbf1f9..8059157aa 100644
--- a/parquet/src/file/serialized_reader.rs
+++ b/parquet/src/file/serialized_reader.rs
@@ -605,7 +605,7 @@ mod tests {
         let file_metadata = metadata.file_metadata();
         assert!(file_metadata.created_by().is_some());
         assert_eq!(
-      file_metadata.created_by().as_ref().unwrap(),
+      file_metadata.created_by().unwrap(),
       "impala version 1.3.0-INTERNAL (build 8a48ddb1eff84592b3fc06bc6f51ec120e1fffc9)"
     );
         assert!(file_metadata.key_value_metadata().is_none());
@@ -695,7 +695,7 @@ mod tests {
         let file_metadata = metadata.file_metadata();
         assert!(file_metadata.created_by().is_some());
         assert_eq!(
-            file_metadata.created_by().as_ref().unwrap(),
+            file_metadata.created_by().unwrap(),
             "parquet-mr version 1.8.1 (build 4aba4dae7bb0d4edbcf7923ae1339f28fd3f7fcf)"
         );
         assert!(file_metadata.key_value_metadata().is_some());
diff --git a/parquet/src/file/writer.rs b/parquet/src/file/writer.rs
index 94a983fe3..754ce1e94 100644
--- a/parquet/src/file/writer.rs
+++ b/parquet/src/file/writer.rs
@@ -188,7 +188,7 @@ impl<W: ParquetWriter> SerializedFileWriter<W> {
                 .iter()
                 .map(|v| v.to_thrift())
                 .collect(),
-            key_value_metadata: self.props.key_value_metadata().to_owned(),
+            key_value_metadata: self.props.key_value_metadata().cloned(),
             created_by: Some(self.props.created_by().to_owned()),
             column_orders: None,
             encryption_algorithm: None,
diff --git a/parquet/src/schema/printer.rs b/parquet/src/schema/printer.rs
index 25873c2a6..2c079d2e9 100644
--- a/parquet/src/schema/printer.rs
+++ b/parquet/src/schema/printer.rs
@@ -231,7 +231,7 @@ fn print_timeunit(unit: &TimeUnit) -> &str {
 
 #[inline]
 fn print_logical_and_converted(
-    logical_type: &Option<LogicalType>,
+    logical_type: Option<&LogicalType>,
     converted_type: ConvertedType,
     precision: i32,
     scale: i32,
@@ -315,7 +315,7 @@ impl<'a> Printer<'a> {
                 // Also print logical type if it is available
                 // If there is a logical type, do not print converted type
                 let logical_type_str = print_logical_and_converted(
-                    &basic_info.logical_type(),
+                    basic_info.logical_type().as_ref(),
                     basic_info.converted_type(),
                     precision,
                     scale,
@@ -347,7 +347,7 @@ impl<'a> Printer<'a> {
                     let r = basic_info.repetition();
                     write!(self.output, "{} group {} ", r, basic_info.name());
                     let logical_str = print_logical_and_converted(
-                        &basic_info.logical_type(),
+                        basic_info.logical_type().as_ref(),
                         basic_info.converted_type(),
                         0,
                         0,