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