Skip to main content

gemath/
markers.rs

1//! Shared marker (ZST) types used for type-level units and coordinate spaces.
2//!
3//! These are intentionally defined **once** so that all modules agree on the same
4//! `Meters/Pixels/World/Local/Screen` types. Re-export them from modules (e.g. `vec2`)
5//! if you want `gemath::vec2::Meters`-style paths to keep working.
6
7/// Marker type for "meters" unit.
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
10pub struct Meters;
11
12/// Marker type for "pixels" unit.
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
15pub struct Pixels;
16
17/// Marker type for world-space coordinates.
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
20pub struct World;
21
22/// Marker type for local-space coordinates.
23#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
24#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
25pub struct Local;
26
27/// Marker type for screen-space coordinates.
28#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
29#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
30pub struct Screen;
31