[package]
name = "road_parceling"
version = "0.1.0"
edition = "2021"
authors = ["Dane Sabo"]
description = "Road-frontage-based parcel subdivision for a city simulation. Pure logic, no rendering or game loop."
license = "MIT OR Apache-2.0"
repository = "https://github.com/danesabo/Historia_Urbis"
readme = "README.md"
keywords = ["geometry", "city", "simulation", "parcel", "gis"]
categories = ["algorithms", "game-development", "science::geo"]

[features]
default = []
viz = ["dep:svg"]
serde = ["dep:serde", "glam/serde", "slotmap/serde"]

[dependencies]
glam = { version = "0.29", features = ["mint"] }
geo = "0.28"
slotmap = "1"
thiserror = "2"
rand = "0.8"
rand_chacha = "0.3"

# optional
svg = { version = "0.18", optional = true }
serde = { version = "1", features = ["derive"], optional = true }

[dev-dependencies]
proptest = "1"
insta = { version = "1", features = ["yaml"] }
criterion = { version = "0.5", default-features = false, features = ["cargo_bench_support"] }

[[bench]]
name = "subdivision"
harness = false

[[example]]
name = "generate_figures"
required-features = ["viz"]

[lints.rust]
missing_docs = "deny"
unsafe_code = "forbid"

[lints.clippy]
all = { level = "warn", priority = -1 }
# Pragmatic exceptions for a numerical/geometry crate. We deliberately
# do *not* enable `pedantic` here — its naming and idiom checks fight
# the conventions of geometry code (single-letter coordinate names,
# small struct field reassignments) without buying real safety.
if_same_then_else = "allow"
field_reassign_with_default = "allow"
