map_model/objects/
area.rs

1use std::fmt;
2
3use serde::{Deserialize, Serialize};
4
5use abstutil::{deserialize_usize, serialize_usize, Tags};
6use geom::Polygon;
7
8use crate::{osm, AreaType};
9
10#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
11pub struct AreaID(
12    #[serde(
13        serialize_with = "serialize_usize",
14        deserialize_with = "deserialize_usize"
15    )]
16    pub usize,
17);
18
19impl fmt::Display for AreaID {
20    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21        write!(f, "Area #{}", self.0)
22    }
23}
24
25/// Areas are just used for drawing.
26#[derive(Serialize, Deserialize, Clone, Debug)]
27pub struct Area {
28    pub id: AreaID,
29    pub area_type: AreaType,
30    pub polygon: Polygon,
31    pub osm_tags: Tags,
32    /// The importing process also automatically creates some areas, so they don't come from OSM.
33    pub osm_id: Option<osm::OsmID>,
34}