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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
use polygon; pub type Coordinate = f64; pub type Id = i64; pub type Role = String; #[derive(Debug, PartialEq, Clone)] pub struct Tag { pub key: String, pub val: String, } #[derive(Debug, PartialEq, Copy, Clone)] pub struct Bounds { pub minlat: Coordinate, pub minlon: Coordinate, pub maxlat: Coordinate, pub maxlon: Coordinate, } #[derive(Debug, PartialEq, Clone)] pub struct Node { pub id: Id, pub lat: Coordinate, pub lon: Coordinate, pub tags: Vec<Tag>, } #[derive(Debug, PartialEq, Clone)] pub struct Way { pub id: Id, pub tags: Vec<Tag>, pub nodes: Vec<UnresolvedReference>, } impl Way { pub fn is_polygon(&self) -> bool { polygon::is_polygon(self) } } #[derive(Debug, PartialEq, Clone)] pub struct Relation { pub id: Id, pub members: Vec<Member>, pub tags: Vec<Tag>, } #[derive(Debug, PartialEq, Clone)] pub enum Member { Node(UnresolvedReference, Role), Way(UnresolvedReference, Role), Relation(UnresolvedReference, Role), } #[derive(Debug, PartialEq, Copy, Clone)] pub enum UnresolvedReference { Node(Id), Way(Id), Relation(Id), } #[derive(Debug, PartialEq, Clone)] pub enum Reference<'a> { Node(&'a Node), Way(&'a Way), Relation(&'a Relation), Unresolved, }