Skip to main content

geoarrow_geojson/encoder/
wkb.rs

1use arrow_array::OffsetSizeTrait;
2use arrow_json::Encoder;
3use geoarrow_array::GeoArrowArrayAccessor;
4use geoarrow_array::array::{GenericWkbArray, WkbViewArray};
5
6use crate::encoder::geometry::encode_geometry;
7
8// An [Encoder] for [GenericWkbArray].
9pub struct GenericWkbEncoder<O: OffsetSizeTrait>(GenericWkbArray<O>);
10
11impl<O: OffsetSizeTrait> GenericWkbEncoder<O> {
12    pub fn new(array: GenericWkbArray<O>) -> Self {
13        Self(array)
14    }
15}
16
17impl<O: OffsetSizeTrait> Encoder for GenericWkbEncoder<O> {
18    fn encode(&mut self, idx: usize, out: &mut Vec<u8>) {
19        let geom = self.0.value(idx).unwrap();
20        encode_geometry(&geom, out);
21    }
22}
23
24// An [Encoder] for [WkbViewArray].
25pub struct WkbViewEncoder(WkbViewArray);
26
27impl WkbViewEncoder {
28    pub fn new(array: WkbViewArray) -> Self {
29        Self(array)
30    }
31}
32
33impl Encoder for WkbViewEncoder {
34    fn encode(&mut self, idx: usize, out: &mut Vec<u8>) {
35        let geom = self.0.value(idx).unwrap();
36        encode_geometry(&geom, out);
37    }
38}