Skip to content

Commit bb0e8ba

Browse files
authored
feat(geoarrow-schema)!: refactor type constructors to make CoordType default (#1165)
Instead of having dimension, coord type, and metadata all in the primary constructor `new`, this changes to have only the dimension in the constructor. Use `with_coord_type` and `with_metadata` to set the other values. Essentially this means users will do something like ```rs PointType::new(dimension, metadata).with_coord_type(coord_type) ``` instead of requiring `coord_type` to be present in `new()`
1 parent 71ddfe3 commit bb0e8ba

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+492
-467
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/geoarrow-array/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ Use [builders][builder] to construct GeoArrow arrays. These builders offer a pus
1818
# use geoarrow_array::builder::PointBuilder;
1919
# use geoarrow_array::scalar::Point;
2020
# use geoarrow_array::GeoArrowArrayAccessor;
21-
# use geoarrow_schema::{CoordType, Dimension, PointType};
21+
# use geoarrow_schema::{Dimension, PointType};
2222
#
23-
let point_type = PointType::new(CoordType::Separated, Dimension::XY, Default::default());
23+
let point_type = PointType::new(Dimension::XY, Default::default());
2424
let mut builder = PointBuilder::new(point_type);
2525

2626
builder.push_point(Some(&geo_types::point!(x: 0., y: 1.)));

rust/geoarrow-array/src/array/coord/interleaved.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ impl InterleavedCoordBuffer {
9999
}
100100

101101
pub(crate) fn storage_type(&self) -> DataType {
102-
PointType::new(Self::COORD_TYPE, self.dim, Default::default()).data_type()
102+
PointType::new(self.dim, Default::default())
103+
.with_coord_type(Self::COORD_TYPE)
104+
.data_type()
103105
}
104106

105107
/// The number of coordinates

rust/geoarrow-array/src/array/coord/separated.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,9 @@ impl SeparatedCoordBuffer {
203203
}
204204

205205
pub(crate) fn storage_type(&self) -> DataType {
206-
PointType::new(Self::COORD_TYPE, self.dim, Default::default()).data_type()
206+
PointType::new(self.dim, Default::default())
207+
.with_coord_type(Self::COORD_TYPE)
208+
.data_type()
207209
}
208210

209211
/// The number of coordinates

rust/geoarrow-array/src/array/geometry.rs

Lines changed: 78 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ impl GeometryArray {
122122
let coord_type = coord_types.into_iter().next().unwrap();
123123

124124
Self {
125-
data_type: GeometryType::new(coord_type, metadata),
125+
data_type: GeometryType::new(metadata).with_coord_type(coord_type),
126126
type_ids,
127127
offsets,
128128
points,
@@ -598,7 +598,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
598598
points[index] = Some(
599599
(
600600
value.child(type_id).as_ref(),
601-
PointType::new(coord_type, dim, Default::default()),
601+
PointType::new(dim, Default::default())
602+
.with_coord_type(coord_type),
602603
)
603604
.try_into()?,
604605
);
@@ -607,7 +608,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
607608
line_strings[index] = Some(
608609
(
609610
value.child(type_id).as_ref(),
610-
LineStringType::new(coord_type, dim, Default::default()),
611+
LineStringType::new(dim, Default::default())
612+
.with_coord_type(coord_type),
611613
)
612614
.try_into()?,
613615
);
@@ -616,7 +618,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
616618
polygons[index] = Some(
617619
(
618620
value.child(type_id).as_ref(),
619-
PolygonType::new(coord_type, dim, Default::default()),
621+
PolygonType::new(dim, Default::default())
622+
.with_coord_type(coord_type),
620623
)
621624
.try_into()?,
622625
);
@@ -625,7 +628,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
625628
mpoints[index] = Some(
626629
(
627630
value.child(type_id).as_ref(),
628-
MultiPointType::new(coord_type, dim, Default::default()),
631+
MultiPointType::new(dim, Default::default())
632+
.with_coord_type(coord_type),
629633
)
630634
.try_into()?,
631635
);
@@ -634,7 +638,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
634638
mline_strings[index] = Some(
635639
(
636640
value.child(type_id).as_ref(),
637-
MultiLineStringType::new(coord_type, dim, Default::default()),
641+
MultiLineStringType::new(dim, Default::default())
642+
.with_coord_type(coord_type),
638643
)
639644
.try_into()?,
640645
);
@@ -643,7 +648,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
643648
mpolygons[index] = Some(
644649
(
645650
value.child(type_id).as_ref(),
646-
MultiPolygonType::new(coord_type, dim, Default::default()),
651+
MultiPolygonType::new(dim, Default::default())
652+
.with_coord_type(coord_type),
647653
)
648654
.try_into()?,
649655
);
@@ -652,11 +658,8 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
652658
gcs[index] = Some(
653659
(
654660
value.child(type_id).as_ref(),
655-
GeometryCollectionType::new(
656-
coord_type,
657-
dim,
658-
Default::default(),
659-
),
661+
GeometryCollectionType::new(dim, Default::default())
662+
.with_coord_type(coord_type),
660663
)
661664
.try_into()?,
662665
);
@@ -692,11 +695,10 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
692695
let new_val = if let Some(arr) = arr.take() {
693696
arr
694697
} else {
695-
PointBuilder::new(PointType::new(
696-
coord_type,
697-
Dimension::from_order(i).unwrap(),
698-
Default::default(),
699-
))
698+
PointBuilder::new(
699+
PointType::new(Dimension::from_order(i).unwrap(), Default::default())
700+
.with_coord_type(coord_type),
701+
)
700702
.finish()
701703
};
702704
arr.replace(new_val);
@@ -705,11 +707,10 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
705707
let new_val = if let Some(arr) = arr.take() {
706708
arr
707709
} else {
708-
LineStringBuilder::new(LineStringType::new(
709-
coord_type,
710-
Dimension::from_order(i).unwrap(),
711-
Default::default(),
712-
))
710+
LineStringBuilder::new(
711+
LineStringType::new(Dimension::from_order(i).unwrap(), Default::default())
712+
.with_coord_type(coord_type),
713+
)
713714
.finish()
714715
};
715716
arr.replace(new_val);
@@ -718,11 +719,10 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
718719
let new_val = if let Some(arr) = arr.take() {
719720
arr
720721
} else {
721-
PolygonBuilder::new(PolygonType::new(
722-
coord_type,
723-
Dimension::from_order(i).unwrap(),
724-
Default::default(),
725-
))
722+
PolygonBuilder::new(
723+
PolygonType::new(Dimension::from_order(i).unwrap(), Default::default())
724+
.with_coord_type(coord_type),
725+
)
726726
.finish()
727727
};
728728
arr.replace(new_val);
@@ -731,11 +731,10 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
731731
let new_val = if let Some(arr) = arr.take() {
732732
arr
733733
} else {
734-
MultiPointBuilder::new(MultiPointType::new(
735-
coord_type,
736-
Dimension::from_order(i).unwrap(),
737-
Default::default(),
738-
))
734+
MultiPointBuilder::new(
735+
MultiPointType::new(Dimension::from_order(i).unwrap(), Default::default())
736+
.with_coord_type(coord_type),
737+
)
739738
.finish()
740739
};
741740
arr.replace(new_val);
@@ -744,11 +743,10 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
744743
let new_val = if let Some(arr) = arr.take() {
745744
arr
746745
} else {
747-
MultiLineStringBuilder::new(MultiLineStringType::new(
748-
coord_type,
749-
Dimension::from_order(i).unwrap(),
750-
Default::default(),
751-
))
746+
MultiLineStringBuilder::new(
747+
MultiLineStringType::new(Dimension::from_order(i).unwrap(), Default::default())
748+
.with_coord_type(coord_type),
749+
)
752750
.finish()
753751
};
754752
arr.replace(new_val);
@@ -757,11 +755,10 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
757755
let new_val = if let Some(arr) = arr.take() {
758756
arr
759757
} else {
760-
MultiPolygonBuilder::new(MultiPolygonType::new(
761-
coord_type,
762-
Dimension::from_order(i).unwrap(),
763-
Default::default(),
764-
))
758+
MultiPolygonBuilder::new(
759+
MultiPolygonType::new(Dimension::from_order(i).unwrap(), Default::default())
760+
.with_coord_type(coord_type),
761+
)
765762
.finish()
766763
};
767764
arr.replace(new_val);
@@ -770,11 +767,13 @@ impl TryFrom<(&UnionArray, GeometryType)> for GeometryArray {
770767
let new_val = if let Some(arr) = arr.take() {
771768
arr
772769
} else {
773-
GeometryCollectionBuilder::new(GeometryCollectionType::new(
774-
coord_type,
775-
Dimension::from_order(i).unwrap(),
776-
Default::default(),
777-
))
770+
GeometryCollectionBuilder::new(
771+
GeometryCollectionType::new(
772+
Dimension::from_order(i).unwrap(),
773+
Default::default(),
774+
)
775+
.with_coord_type(coord_type),
776+
)
778777
.finish()
779778
};
780779
arr.replace(new_val);
@@ -910,59 +909,52 @@ type ChildrenArrays = (
910909
fn empty_children(coord_type: CoordType) -> ChildrenArrays {
911910
(
912911
core::array::from_fn(|i| {
913-
PointBuilder::new(PointType::new(
914-
coord_type,
915-
Dimension::from_order(i).unwrap(),
916-
Default::default(),
917-
))
912+
PointBuilder::new(
913+
PointType::new(Dimension::from_order(i).unwrap(), Default::default())
914+
.with_coord_type(coord_type),
915+
)
918916
.finish()
919917
}),
920918
core::array::from_fn(|i| {
921-
LineStringBuilder::new(LineStringType::new(
922-
coord_type,
923-
Dimension::from_order(i).unwrap(),
924-
Default::default(),
925-
))
919+
LineStringBuilder::new(
920+
LineStringType::new(Dimension::from_order(i).unwrap(), Default::default())
921+
.with_coord_type(coord_type),
922+
)
926923
.finish()
927924
}),
928925
core::array::from_fn(|i| {
929-
PolygonBuilder::new(PolygonType::new(
930-
coord_type,
931-
Dimension::from_order(i).unwrap(),
932-
Default::default(),
933-
))
926+
PolygonBuilder::new(
927+
PolygonType::new(Dimension::from_order(i).unwrap(), Default::default())
928+
.with_coord_type(coord_type),
929+
)
934930
.finish()
935931
}),
936932
core::array::from_fn(|i| {
937-
MultiPointBuilder::new(MultiPointType::new(
938-
coord_type,
939-
Dimension::from_order(i).unwrap(),
940-
Default::default(),
941-
))
933+
MultiPointBuilder::new(
934+
MultiPointType::new(Dimension::from_order(i).unwrap(), Default::default())
935+
.with_coord_type(coord_type),
936+
)
942937
.finish()
943938
}),
944939
core::array::from_fn(|i| {
945-
MultiLineStringBuilder::new(MultiLineStringType::new(
946-
coord_type,
947-
Dimension::from_order(i).unwrap(),
948-
Default::default(),
949-
))
940+
MultiLineStringBuilder::new(
941+
MultiLineStringType::new(Dimension::from_order(i).unwrap(), Default::default())
942+
.with_coord_type(coord_type),
943+
)
950944
.finish()
951945
}),
952946
core::array::from_fn(|i| {
953-
MultiPolygonBuilder::new(MultiPolygonType::new(
954-
coord_type,
955-
Dimension::from_order(i).unwrap(),
956-
Default::default(),
957-
))
947+
MultiPolygonBuilder::new(
948+
MultiPolygonType::new(Dimension::from_order(i).unwrap(), Default::default())
949+
.with_coord_type(coord_type),
950+
)
958951
.finish()
959952
}),
960953
core::array::from_fn(|i| {
961-
GeometryCollectionBuilder::new(GeometryCollectionType::new(
962-
coord_type,
963-
Dimension::from_order(i).unwrap(),
964-
Default::default(),
965-
))
954+
GeometryCollectionBuilder::new(
955+
GeometryCollectionType::new(Dimension::from_order(i).unwrap(), Default::default())
956+
.with_coord_type(coord_type),
957+
)
966958
.finish()
967959
}),
968960
)
@@ -978,7 +970,7 @@ macro_rules! impl_primitive_cast {
978970

979971
let type_ids = vec![value.type_id(dim); value.len()].into();
980972
let offsets = ScalarBuffer::from_iter(0..value.len() as i32);
981-
let data_type = GeometryType::new(coord_type, metadata);
973+
let data_type = GeometryType::new(metadata).with_coord_type(coord_type);
982974
let mut children = empty_children(coord_type);
983975

984976
children.$value_edit[dim.order()] = value;
@@ -1035,7 +1027,7 @@ mod test {
10351027

10361028
fn geom_array(coord_type: CoordType) -> GeometryArray {
10371029
let geoms = geoms().into_iter().map(Some).collect::<Vec<_>>();
1038-
let typ = GeometryType::new(coord_type, Default::default());
1030+
let typ = GeometryType::new(Default::default()).with_coord_type(coord_type);
10391031
GeometryBuilder::from_nullable_geometries(&geoms, typ)
10401032
.unwrap()
10411033
.finish()
@@ -1101,7 +1093,7 @@ mod test {
11011093
.filter_map(|(i, geom)| if geom.is_none() { Some(i) } else { None })
11021094
.collect::<Vec<_>>();
11031095

1104-
let typ = GeometryType::new(CoordType::Interleaved, Default::default());
1096+
let typ = GeometryType::new(Default::default());
11051097
let geo_arr = GeometryBuilder::from_nullable_geometries(&geoms, typ)
11061098
.unwrap()
11071099
.finish();
@@ -1116,7 +1108,7 @@ mod test {
11161108
let geoms = raw::geometry::geoms();
11171109
let expected_nulls = NullBuffer::from_iter(geoms.iter().map(|g| g.is_some()));
11181110

1119-
let typ = GeometryType::new(CoordType::Interleaved, Default::default());
1111+
let typ = GeometryType::new(Default::default());
11201112
let geo_arr = GeometryBuilder::from_nullable_geometries(&geoms, typ)
11211113
.unwrap()
11221114
.finish();

rust/geoarrow-array/src/array/geometrycollection.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ impl GeometryCollectionArray {
4444
nulls: Option<NullBuffer>,
4545
metadata: Arc<Metadata>,
4646
) -> Self {
47-
let coord_type = array.coord_type;
4847
Self {
49-
data_type: GeometryCollectionType::new(coord_type, array.dim, metadata),
48+
data_type: GeometryCollectionType::new(array.dim, metadata)
49+
.with_coord_type(array.coord_type),
5050
array,
5151
geom_offsets,
5252
nulls,
@@ -318,8 +318,7 @@ mod test {
318318
.filter_map(|(i, geom)| if geom.is_none() { Some(i) } else { None })
319319
.collect::<Vec<_>>();
320320

321-
let typ =
322-
GeometryCollectionType::new(CoordType::Interleaved, Dimension::XY, Default::default());
321+
let typ = GeometryCollectionType::new(Dimension::XY, Default::default());
323322
let geo_arr = GeometryCollectionBuilder::from_nullable_geometry_collections(&geoms, typ)
324323
.unwrap()
325324
.finish();
@@ -334,8 +333,7 @@ mod test {
334333
let geoms = raw::geometrycollection::xy::geoms();
335334
let expected_nulls = NullBuffer::from_iter(geoms.iter().map(|g| g.is_some()));
336335

337-
let typ =
338-
GeometryCollectionType::new(CoordType::Interleaved, Dimension::XY, Default::default());
336+
let typ = GeometryCollectionType::new(Dimension::XY, Default::default());
339337
let geo_arr = GeometryCollectionBuilder::from_nullable_geometry_collections(&geoms, typ)
340338
.unwrap()
341339
.finish();

0 commit comments

Comments
 (0)