Skip to content

Commit fdd7e31

Browse files
nyurikCommanderStormautofix-ci[bot]pre-commit-ci[bot]
authored
chore(rust): rm pub fields, builder pattern (#1428)
Co-authored-by: Frank Elsinga <frank@elsinga.de> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Frank Elsinga <frank.elsinga@tum.de> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 8872598 commit fdd7e31

50 files changed

Lines changed: 1476 additions & 713 deletions

Some content is hidden

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

rust/mlt-core/benches/decoding_strings.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,20 +84,15 @@ fn make_geometry(n: usize) -> GeometryValues {
8484
/// Encode `props` into a single-layer tile with `n` point features and return wire bytes.
8585
fn encode_layer(n: usize, props: Vec<StagedProperty>, cfg: ExplicitEncoder) -> Vec<u8> {
8686
let mut codecs = Codecs::default();
87-
StagedLayer {
88-
name: "bench".into(),
89-
extent: 4096,
90-
id: StagedId::None,
91-
geometry: make_geometry(n),
92-
properties: props,
93-
}
94-
.encode_into(
95-
Encoder::with_explicit(EncoderConfig::default(), cfg),
96-
&mut codecs,
97-
)
98-
.expect("encode_layer failed")
99-
.into_layer_bytes()
100-
.expect("into_layer_bytes failed")
87+
StagedLayer::new("bench", 4096, StagedId::None, make_geometry(n), props)
88+
.expect("valid bench layer")
89+
.encode_into(
90+
Encoder::with_explicit(EncoderConfig::default(), cfg),
91+
&mut codecs,
92+
)
93+
.expect("encode_layer failed")
94+
.into_layer_bytes()
95+
.expect("into_layer_bytes failed")
10196
}
10297

10398
/// Sum the byte lengths of all non-null string property values across all features.

rust/mlt-core/benches/encoding_e2e.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,7 @@ fn bench_encode(c: &mut Criterion) {
5454
let total_bytes: usize = tiles.iter().map(|(_, d)| d.len()).sum();
5555
group.throughput(Throughput::Bytes(u64::from_usize(total_bytes)));
5656
for tessellate in [true, false] {
57-
let enc_config = EncoderConfig {
58-
tessellate,
59-
..Default::default()
60-
};
57+
let enc_config = EncoderConfig::default().with_tessellation(tessellate);
6158
for physical in limit(PhysicalEncoder::iter()) {
6259
for logical in limit(LogicalEncoder::iter()) {
6360
let int_enc = IntEncoder::new(logical, physical);
@@ -69,7 +66,7 @@ fn bench_encode(c: &mut Criterion) {
6966
&tiles,
7067
|b, tiles| {
7168
b.iter_batched(
72-
|| decode_to_owned(tiles, enc_config.tessellate),
69+
|| decode_to_owned(tiles, enc_config.tessellate()),
7370
|layers| {
7471
let mut codecs = Codecs::default();
7572
for layer in layers {

rust/mlt-core/benches/encoding_from_mvt.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ fn parse_mvt_to_tile_layers(mvt_files: &[(String, Vec<u8>)]) -> Vec<TileLayer> {
3333

3434
fn bench_encode_from_mvt(c: &mut Criterion) {
3535
let mut group = c.benchmark_group("mlt encode from mvt");
36-
let cfg = EncoderConfig {
37-
tessellate: true,
38-
..Default::default()
39-
};
36+
let cfg = EncoderConfig::default().with_tessellation(true);
4037

4138
for zoom in BENCHMARKED_ZOOM_LEVELS {
4239
let mvt_files = load_mvt_tiles(zoom);

rust/mlt-core/src/codecs/fsst.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ mod tests {
141141
use super::*;
142142
use crate::decoder::{DictionaryType, LengthType, RawFsstData, RawStream, StreamType};
143143
use crate::encoder::model::StreamCtx;
144-
use crate::encoder::{Codecs, EncodedStream, Encoder, ExplicitEncoder, IntEncoder};
144+
use crate::encoder::{
145+
Codecs, EncodedStream, Encoder, EncoderConfig, ExplicitEncoder, IntEncoder,
146+
};
145147
use crate::test_helpers::{assert_empty, dec, parser};
146148
use crate::utils::BinarySerializer as _;
147149

@@ -152,15 +154,15 @@ mod tests {
152154

153155
let sym_len_bytes = {
154156
let mut enc = Encoder::with_explicit(
155-
Encoder::default().cfg,
157+
EncoderConfig::default(),
156158
ExplicitEncoder::all(IntEncoder::varint()),
157159
);
158160
let mut codecs = Codecs::default();
159161
let ctx = StreamCtx::prop(StreamType::Length(LengthType::Symbol), "symbol");
160162
codecs
161163
.write_int_stream(&raw.symbol_lengths, &ctx, &mut enc)
162164
.unwrap();
163-
enc.data
165+
enc.data().to_vec()
164166
};
165167
let sym_table_stream = EncodedStream {
166168
meta: StreamMeta::new_none(
@@ -172,15 +174,15 @@ mod tests {
172174
};
173175
let lengths_bytes = {
174176
let mut enc = Encoder::with_explicit(
175-
Encoder::default().cfg,
177+
EncoderConfig::default(),
176178
ExplicitEncoder::all(IntEncoder::varint()),
177179
);
178180
let mut codecs = Codecs::default();
179181
let ctx = StreamCtx::prop(StreamType::Length(LengthType::Dictionary), "dictionary");
180182
codecs
181183
.write_int_stream(&raw.value_lengths, &ctx, &mut enc)
182184
.unwrap();
183-
enc.data
185+
enc.data().to_vec()
184186
};
185187
let corpus_stream = EncodedStream {
186188
meta: StreamMeta::new_none(StreamType::Data(DictionaryType::Single), values.len())

rust/mlt-core/src/convert/geojson.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,20 @@ impl FeatureCollection {
2828
let Layer::Tag01(parsed) = layer else {
2929
continue;
3030
};
31-
let layer_name = parsed.name;
32-
let extent = parsed.extent;
31+
let layer_name = parsed.name();
32+
let extent = parsed.extent().get();
3333
let mut feat_iter = parsed.iter_features();
3434
while let Some(feat) = feat_iter.next() {
3535
let feat = feat?;
3636
let mut properties = BTreeMap::new();
3737
for p in feat.iter_properties() {
38-
properties.insert(p.name.to_string(), p.value.into());
38+
properties.insert(p.name().to_string(), p.value().into());
3939
}
4040
properties.insert("_layer".into(), Value::String(layer_name.to_string()));
4141
properties.insert("_extent".into(), Value::Number(extent.into()));
4242
features.push(Feature {
43-
geometry: feat.geometry,
44-
id: feat.id,
43+
geometry: feat.geometry().clone(),
44+
id: feat.id(),
4545
properties,
4646
ty: "Feature".into(),
4747
});

rust/mlt-core/src/convert/mvt/decode.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,7 @@ impl TryFrom<MvtLayer> for TileLayer {
113113
});
114114
}
115115

116-
Ok(Self {
117-
name: layer.name,
118-
extent: layer.extent.get(),
119-
property_names: col_names,
120-
features: tile_features,
121-
})
116+
Self::from_parts(layer.name, layer.extent.get(), col_names, tile_features)
122117
}
123118
}
124119

rust/mlt-core/src/convert/mvt/encode.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Encode row-oriented [`TileLayer`]s as MVT (Mapbox Vector Tile) bytes,
22
//! delegating wire-format details to the [`fast_mvt`] crate.
33
4-
use fast_mvt::{DEFAULT_EXTENT, MvtExtent, MvtTileBuilder, MvtValue};
4+
use fast_mvt::{MvtTileBuilder, MvtValue};
55

66
use crate::decoder::{PropValue, TileLayer};
77
use crate::{MltError, MltResult};
@@ -13,15 +13,13 @@ pub fn tile_layers_to_mvt(layers: Vec<TileLayer>) -> MltResult<Vec<u8>> {
1313
if layer.name.is_empty() {
1414
return Err(MltError::MissingLayerName);
1515
}
16-
let extent = MvtExtent::new(layer.extent).unwrap_or(DEFAULT_EXTENT);
1716
let mut mvt_layer = tile.layer_with_capacity(layer.name, layer.features.len())?;
18-
mvt_layer.extent(extent);
19-
let names = layer.property_names;
17+
mvt_layer.extent(layer.extent.into());
2018
for feat in layer.features {
2119
let mut feature = mvt_layer.feature(feat.geometry)?;
2220
feature.id(feat.id);
2321
for (col_idx, prop) in feat.properties.into_iter().enumerate() {
24-
if let Some(name) = names.get(col_idx)
22+
if let Some(name) = layer.property_names.get(col_idx)
2523
&& let Ok(value) = MvtValue::try_from(prop)
2624
{
2725
feature.tag(name, value)?;
@@ -57,7 +55,7 @@ impl TryFrom<PropValue> for MvtValue {
5755
#[cfg(test)]
5856
mod tests {
5957
use super::*;
60-
use crate::decoder::TileFeature;
58+
use crate::decoder::{Extent, TileFeature};
6159
use crate::mvt::mvt_to_tile_layers;
6260

6361
#[test]
@@ -71,8 +69,9 @@ mod tests {
7169
fn rejects_empty_layer_name() {
7270
let layer = TileLayer {
7371
name: String::new(),
74-
extent: 4096,
72+
extent: Extent::new(4096).unwrap(),
7573
property_names: vec![],
74+
property_kinds: vec![],
7675
features: vec![],
7776
};
7877

@@ -94,20 +93,24 @@ mod tests {
9493
(0, 10).into(),
9594
(0, 0).into(),
9695
];
97-
let layer = TileLayer {
98-
name: "L".into(),
99-
extent: 4096,
100-
property_names: vec![],
101-
features: vec![TileFeature {
96+
let layer = TileLayer::from_parts(
97+
"L",
98+
4096,
99+
vec![],
100+
vec![TileFeature {
102101
id: Some(1),
103102
geometry: Geometry::Polygon(Polygon::new(LineString(ring), vec![])),
104103
properties: vec![],
105104
}],
106-
};
105+
)
106+
.unwrap();
107107
let bytes = tile_layers_to_mvt(vec![layer]).unwrap();
108108
let back = mvt_to_tile_layers(bytes).unwrap();
109-
let Geometry::Polygon(p) = &back[0].features[0].geometry else {
110-
panic!("expected polygon, got {:?}", back[0].features[0].geometry);
109+
let Geometry::Polygon(p) = back[0].features()[0].geometry() else {
110+
panic!(
111+
"expected polygon, got {:?}",
112+
back[0].features()[0].geometry()
113+
);
111114
};
112115
assert_eq!(p.exterior().0.len(), 5);
113116
assert_eq!(p.exterior().0.first(), p.exterior().0.last());

rust/mlt-core/src/decoder/analyze.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ where
1313
{
1414
fn collect_statistic(&self, stat: StatType) -> usize {
1515
match stat {
16-
StatType::DecodedMetaSize => self.name.len() + size_of::<u32>(),
16+
StatType::DecodedMetaSize => self.name().len() + size_of::<u32>(),
1717
StatType::DecodedDataSize => {
1818
self.id.collect_statistic(stat)
1919
+ self.geometry.collect_statistic(stat)

rust/mlt-core/src/decoder/geometry/geotype.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ impl GeometryType {
3131
}
3232

3333
impl GeometryValues {
34+
#[must_use]
35+
pub fn feature_count(&self) -> usize {
36+
self.vector_types.len()
37+
}
38+
3439
/// Geometry types for each feature, in insertion order.
3540
#[must_use]
3641
pub fn vector_types(&self) -> &[GeometryType] {

0 commit comments

Comments
 (0)