diff --git a/src/datatypes/schema.rs b/src/datatypes/schema.rs index 671c943862..f8fb39331f 100644 --- a/src/datatypes/schema.rs +++ b/src/datatypes/schema.rs @@ -58,3 +58,24 @@ impl From> for Schema { } } } + +#[cfg(feature = "arrow")] +impl From for Schema { + fn from(schema: arrow_schema::Schema) -> Self { + let arrow_schema::Schema { fields, metadata } = schema; + Self { + fields: fields.iter().map(Into::into).collect(), + metadata: metadata.into_iter().collect(), + } + } +} + +#[cfg(feature = "arrow")] +impl From for arrow_schema::Schema { + fn from(schema: Schema) -> Self { + let Schema { fields, metadata } = schema; + let fields: arrow_schema::Fields = + fields.into_iter().map(arrow_schema::Field::from).collect(); + Self::new_with_metadata(fields, metadata.into_iter().collect()) + } +}