openstreetmap_api/api/
capabilities.rs1use crate::types;
2use crate::Openstreetmap;
3use crate::OpenstreetmapError;
4use crate::RequestOptions;
5
6#[derive(Debug, Deserialize)]
7struct Osm {
8 pub api: Api,
9 pub policy: types::Policy,
10}
11
12impl From<Osm> for types::CapabilitiesAndPolicy {
13 fn from(value: Osm) -> types::CapabilitiesAndPolicy {
14 types::CapabilitiesAndPolicy {
15 capabilities: types::Capabilities {
16 versions: types::VersionRange {
17 minimum: value.api.version.minimum,
18 maximum: value.api.version.maximum,
19 },
20 maximum_area: value.api.area.maximum,
21 maximum_note_area: value.api.note_area.maximum,
22 tracepoints_per_page: value.api.tracepoints.per_page,
23 maximum_waynodes: value.api.waynodes.maximum,
24 maximum_changeset_elements: value.api.changesets.maximum_elements,
25 timeout: value.api.timeout.seconds,
26 status: types::Status {
27 database: value.api.status.database,
28 api: value.api.status.api,
29 gpx: value.api.status.gpx,
30 },
31 },
32 policy: value.policy,
33 }
34 }
35}
36
37#[derive(Debug, Deserialize)]
38struct Api {
39 pub version: Version,
40 pub area: Area,
41 pub note_area: NoteArea,
42 pub tracepoints: Tracepoints,
43 pub waynodes: Waynodes,
44 pub changesets: Changesets,
45 pub timeout: Timeout,
46 pub status: types::Status,
47}
48
49#[derive(Debug, Deserialize)]
50struct Version {
51 pub minimum: String,
52 pub maximum: String,
53}
54
55#[derive(Debug, Deserialize)]
56struct Area {
57 pub maximum: f64,
58}
59
60#[derive(Debug, Deserialize)]
61struct NoteArea {
62 pub maximum: f64,
63}
64
65#[derive(Debug, Deserialize)]
66struct Tracepoints {
67 pub per_page: u64,
68}
69
70#[derive(Debug, Deserialize)]
71struct Waynodes {
72 pub maximum: u64,
73}
74
75#[derive(Debug, Deserialize)]
76struct Changesets {
77 pub maximum_elements: u64,
78}
79
80#[derive(Debug, Deserialize)]
81struct Timeout {
82 pub seconds: u64,
83}
84
85pub struct Capabilities {
86 client: Openstreetmap,
87}
88
89impl Capabilities {
90 pub fn new(client: &Openstreetmap) -> Self {
91 Capabilities {
92 client: client.clone(),
93 }
94 }
95
96 pub async fn get(&self) -> Result<types::CapabilitiesAndPolicy, OpenstreetmapError> {
97 let capabilities_and_policies: types::CapabilitiesAndPolicy = self
98 .client
99 .request::<(), Osm>(
100 reqwest::Method::GET,
101 "capabilities",
102 types::RequestBody::None,
103 RequestOptions::new(),
104 )
105 .await?
106 .into();
107
108 Ok(capabilities_and_policies)
109 }
110}