1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
extern crate alloc;
use alloc::string::String;
use alloc::vec::Vec;
use alloc::collections::BTreeMap;
/// Primitive types supported by Properties
#[derive(Debug, PartialEq)]
pub enum Primitive {
    /// String type utf8 encoded
    String(String),
    /// unsigned 64 bit integer
    Unsigned(u64),
    /// signed 64 bit integer
    Signed(i64),
    /// floating point number
    Float(f32),
    /// double precision floating point number
    Double(f64),
    /// boolean
    Boolean(bool),
    /// null
    Null,
}
/// When an array is used, it must be an array of the same type.
/// Arrays are also limited to primitives and objects of primitives
#[derive(Debug, PartialEq)]
pub enum ValueArray {
    /// Array of primitives
    Primitives(Vec<Primitive>),
    /// Array of objects that may only contain primitives
    Objects(Vec<BTreeMap<String, Primitive>>),
}
/// Supports primitive types `string`, `number`, `boolean`, `null`
/// May be an array of those types, or an object of those types
/// Object keys are always strings, values can be any basic type, an array, or a nested object.
/// Array values must all be the same type.
#[derive(Debug, PartialEq)]
pub enum Value {
    /// A primitive value
    Primitive(Primitive),
    /// An array of values
    Array(ValueArray),
    /// A nested object
    Object(BTreeMap<String, Value>),
}
/// Shape of a features properties object
pub type Properties = BTreeMap<String, Value>;
/// Shape of a feature's M-Values object
pub type MValue = Properties;
/// LineString Properties Shape
pub type LineStringMValues = Vec<MValue>;
/// MultiLineString MValues Shape
pub type MultiLineStringMValues = Vec<LineStringMValues>;
/// Polygon MValues Shape
pub type PolygonMValues = Vec<LineStringMValues>;
/// MultiPolygon MValues Shape
pub type MultiPolygonMValues = Vec<PolygonMValues>;
/// All possible M-Value shapes
#[derive(Debug, PartialEq)]
pub enum MValues {
    /// Single M-Value
    MValue(MValue),
    /// LineString M-Value
    LineStringMValues(LineStringMValues),
    /// MultiLineString M-Value
    MultiLineStringMValues(MultiLineStringMValues),
    /// Polygon M-Value
    PolygonMValues(PolygonMValues),
    /// MultiPolygon M-Value
    MultiPolygonMValues(MultiPolygonMValues),
}