osm_io/osm/model/
relation.rs

1use 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}