mlt_core/decoder/geometry/
model.rs1use derive_debug::Dbg;
2use num_enum::TryFromPrimitive;
3use serde::{Deserialize, Serialize};
4
5use crate::decoder::RawStream;
6#[cfg(feature = "unstable-v2")]
7use crate::tile::ZStep;
8use crate::utils::formatter::{opt_vec_seq, vec_seq};
9use crate::{DecodeState, Lazy};
10
11pub type Geometry<'a, S = Lazy> = <S as DecodeState>::LazyOrParsed<RawGeometry<'a>, GeometryValues>;
16
17#[derive(Debug, PartialEq, Clone)]
19pub struct RawGeometry<'a> {
20 pub(crate) types: GeoTypes<'a>,
21 pub(crate) index_base: IndexBase,
22 pub(crate) items: Vec<RawStream<'a>>,
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
27pub(crate) enum IndexBase {
28 Feature,
30 #[cfg(feature = "unstable-v2")]
32 Layer,
33}
34
35#[derive(Debug, PartialEq, Clone)]
41pub enum GeoTypes<'a> {
42 Stream(RawStream<'a>),
44 #[cfg(feature = "unstable-v2")]
46 Uniform {
47 geometry_type: GeometryType,
48 feature_count: u32,
49 },
50}
51
52#[derive(Clone, Dbg, Default, PartialEq, Eq)]
54pub struct GeometryValues {
55 #[dbg(formatter = "vec_seq")]
56 pub(crate) vector_types: Vec<GeometryType>,
57 #[dbg(formatter = "opt_vec_seq")]
58 pub(crate) geometry_offsets: Option<Vec<u32>>,
59 #[dbg(formatter = "opt_vec_seq")]
60 pub(crate) part_offsets: Option<Vec<u32>>,
61 #[dbg(formatter = "opt_vec_seq")]
62 pub(crate) ring_offsets: Option<Vec<u32>>,
63 #[dbg(formatter = "opt_vec_seq")]
64 pub(crate) index_buffer: Option<Vec<u32>>,
65 #[dbg(formatter = "opt_vec_seq")]
66 pub(crate) triangle_offsets: Option<Vec<u32>>,
67 #[dbg(formatter = "opt_vec_seq")]
68 pub(crate) vertices: Option<Vec<i32>>,
69 #[cfg(feature = "unstable-v2")]
71 pub(crate) z_step: Option<ZStep>,
72}
73
74#[derive(
76 Debug,
77 Clone,
78 Copy,
79 PartialEq,
80 PartialOrd,
81 Eq,
82 Hash,
83 Ord,
84 TryFromPrimitive,
85 strum::Display,
86 strum::IntoStaticStr,
87 Serialize,
88 Deserialize,
89)]
90#[repr(u8)]
91#[cfg_attr(test, derive(proptest_derive::Arbitrary))]
92pub enum GeometryType {
93 Point,
97 LineString,
98 Polygon,
99 MultiPoint,
100 MultiLineString,
101 MultiPolygon,
102}