Core data model

Updated Jul 16, 2026

The wildside-core crate defines the types that form the API surface for consumers.

Points of interest

PointOfInterest represents an attraction worth visiting and carries a unique identifier, WGS84 coordinate, and a free-form map of tags. Helper constructors new and with_empty_tags simplify creation, and the type implements RTreeObject so it can be indexed directly. Spatial lookup is exposed through SpatialIndex, which supports iteration, bounding-box queries, and index construction via the build_spatial_index helper.[^1]

Themes and interest profiles

Theme enumerates supported interest categories and provides string conversions for serialization and parsing. InterestProfile stores per-theme weights in the 0.0..=1.0 range and offers validated setters (set_weight, try_set_weight) and chaining via with_weight. Invalid weights raise WeightError (OutOfRange or NonFinite).[^2][^3]

Routes

Route captures an ordered list of points of interest plus a caller-supplied Duration. Use Route::new to build routes returned from solvers and Route::empty for initialization. The route does not infer travel time; callers must provide the aggregate duration explicitly.[^4]