osm_io/osm/model/
relation.rs1use crate::osm::model::tag::Tag;
2
3#[derive(Debug, Clone, Eq, PartialEq)]
4pub struct MemberData {
5 id: i64,
6 role: String,
7}
8
9impl MemberData {
10 pub fn new(id: i64, role: String) -> MemberData {
11 MemberData {
12 id,
13 role,
14 }
15 }
16 pub fn id(&self) -> i64 {
17 self.id
18 }
19
20 pub fn role(&self) -> &String {
21 &self.role
22 }
23}
24
25#[derive(Debug, Clone, Eq, PartialEq)]
26pub enum Member {
27 Node {
28 member: MemberData,
29 },
30 Way {
31 member: MemberData,
32 },
33 Relation {
34 member: MemberData,
35 },
36}
37
38#[derive(Debug, Clone)]
39pub struct Relation {
40 id: i64,
41 version: i32,
42 timestamp: i64,
43 changeset: i64,
44 uid: i32,
45 user: String,
46 visible: bool,
47 members: Vec<Member>,
48 tags: Vec<Tag>,
49}
50
51impl Relation {
52 #[allow(clippy::too_many_arguments)]
53 pub fn new(id: i64, version: i32, timestamp: i64, changeset: i64, uid: i32, user: String, visible: bool, members: Vec<Member>, tags: Vec<Tag>) -> Relation {
54 Relation {
55 id,
56 version,
57 timestamp,
58 changeset,
59 uid,
60 user,
61 visible,
62 members,
63 tags,
64 }
65 }
66
67 pub fn id(&self) -> i64 {
68 self.id
69 }
70
71 pub fn version(&self) -> i32 {
72 self.version
73 }
74
75 pub fn timestamp(&self) -> i64 {
76 self.timestamp
77 }
78
79 pub fn changeset(&self) -> i64 {
80 self.changeset
81 }
82
83 pub fn uid(&self) -> i32 {
84 self.uid
85 }
86
87 pub fn user(&self) -> &String {
88 &self.user
89 }
90
91 pub fn take_user(&mut self) -> String {
92 std::mem::take(&mut self.user)
93 }
94
95 pub fn visible(&self) -> bool {
96 self.visible
97 }
98
99 pub fn members(&self) -> &Vec<Member> {
100 &self.members
101 }
102
103 pub fn tags(&self) -> &Vec<Tag> {
104 &self.tags
105 }
106
107 pub fn take_tags(&mut self) -> Vec<Tag> {
108 std::mem::take(&mut self.tags)
109 }
110}