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
//! Geometry kind tags and the tag-hierarchy marker traits.
//!
//! Eleven empty tag types identify each OGC geometry kind, and a set of
//! marker traits (`Single`, `Multi`, `Pointlike`, `Linear`, `Polylinear`,
//! `Areal`, `Polygonal`, `Volumetric`) reproduce the C++ struct-inheritance
//! hierarchy at the Rust trait-bound level. Together they let downstream
//! crates dispatch on tag *identity* (one impl per tag) and tag *category*
//! (one impl that covers every linear tag, every areal tag, etc.) — the
//! Rust analogue of `tag_cast<Tag, Stops...>`.
//!
//! References:
//! - `boost/geometry/core/tags.hpp` — tag hierarchy declarations.
//! - `boost/geometry/core/tag.hpp` — the `traits::tag<G>::type` metafunction.
//! - `boost/geometry/core/tag_cast.hpp` — base-tag walking, replaced here
//! by Rust trait super-bounds.
//!
//! # Examples
//!
//! Category dispatch — one impl covers every linear tag:
//!
//! ```
//! use geometry_tag::{Linear, LinestringTag, MultiLinestringTag, SegmentTag};
//!
//! fn accepts_linear<T: Linear>() {}
//! accepts_linear::<SegmentTag>();
//! accepts_linear::<LinestringTag>();
//! accepts_linear::<MultiLinestringTag>();
//! ```
pub use ;
pub use SameAs;
pub use ;